Cosmos DB不尊重查询中的Json.Net CamelCaseNamingStrategy

时间:2017-07-06 13:38:36

标签: c# json linq json.net azure-cosmosdb

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

CreateDocumentAsync(例如)使用属性的驼峰案例名称正确地序列化我的JSON中的Cosmos DB文档。到目前为止一切都很好。

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

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

VS

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

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

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

提前感谢大家的帮助。

1 个答案:

答案 0 :(得分:1)

目前无法实现。见https://stackoverflow.com/a/37490316/37421

我发现通过财产设置它非常危险,并且是一个bugfest。