【问题标题】:Cosmos DB Not Respecting Json.Net CamelCaseNamingStrategy in Query [duplicate]Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy [重复]
【发布时间】: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")] 手动设置每个属性。

提前感谢大家的帮助。

【问题讨论】:

  • 布莱恩,感谢您的格式化。我的第一个问题完全忘记了格式化。以后会尽量避免。

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


【解决方案1】:

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

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

【讨论】:

  • 感谢您的快速回复。我同意您的观点,即这可能会出现错误,而且也很乏味。我会耐心等待 Cosmos DB 团队按照他们的路线图解决这个问题。
猜你喜欢
  • 2022-08-20
  • 1970-01-01
  • 2020-09-24
  • 2018-12-17
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多