Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy [重复]

Posted

技术标签:

【中文标题】Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy [重复]【英文标题】:Cosmos DB Not Respecting Json.Net CamelCaseNamingStrategy in Query [duplicate] 【发布时间】:2017-12-10 13:27:33 【问题描述】:

我正在.Net 中为 Cosmos DB 创建一个存储库,并且为了避免使用 [JsonProperty(PropertyName = "thePropertyName")] 装饰每个类属性,我已经使用 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] 装饰了我的类。

CreateDocumentAsync(例如)使用属性的驼峰式名称以 JSON 格式正确序列化我的 Cosmos DB 文档。到目前为止一切顺利。

然而,我的问题是,当我通过 LINQ 查询 Cosmos DB 时,它生成的用于查询 COSMOS DB 的 SQL 不尊重装饰类的 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] 属性,因此不会返回任何文档。这是因为 Cosmos DB 查询对于字段/属性名称是区分大小写的。例如,以下产生不同的结果(注意名称的大小写差异):

SELECT * FROM c WHERE c.name = "Health"

对比

SELECT * FROM c WHERE c.Name = "Health" 

我已通过检查CreateDocumentQuery 生成的查询 SQL 确认了这一点,并寻找了可能允许我在 SqlQuerySpec 中指示属性名称大小写但没有成功的选项。

所以,我的问题是:有谁知道如何在 Cosmos Db 中使用类定义的驼峰大小写策略进行 LINQ 查询,而不必通过 [JsonProperty(PropertyName = "thePropertyName")] 手动设置每个属性。

提前感谢大家的帮助。

【问题讨论】:

布莱恩,感谢您的格式化。我的第一个问题完全忘记了格式化。以后会尽量避免。 【参考方案1】:

目前不可能。见https://***.com/a/37490316/37421

我发现通过属性设置它非常危险,而且是一个错误。

【讨论】:

感谢您的快速回复。我同意您的观点,即这可能会出现错误,而且也很乏味。我会耐心等待 Cosmos DB 团队按照他们的路线图解决这个问题。

以上是关于Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure Cosmos DB 的一个查询中选择多个聚合值

Cosmos DB,如果我在使用 SkipToken 查询时更新某些项目会发生啥?

嵌套对象的 Cosmos DB SQL 查询

Cosmos DB - 查询所选分区的最新文档?

Cosmos DB 存储过程

用于 cosmos db json 中嵌套对象的 Linq