如何让DocumentDB SDK在linq查询时使用驼峰命名法?

How to tell DocumentDB SDK to use camelCase during linq query?

考虑到用户集合中存储的文档 { "userName": "user1" },以及以下 User class:

public class User
{
        public string Id { get; set; }
        public string UserName { get; set; }
}

使用以下 JSON.net 设置:

JsonConvert.DefaultSettings = () =>
{
    return new JsonSerializerSettings
    {
       ContractResolver = new CamelCasePropertyNamesContractResolver(),
    };
};

当我这样使用 Linq 查询时:

var t = _client.CreateDocumentQuery<User>(_collection.SelfLink)
            .Where(u => u.UserName == "user1").AsDocumentQuery().ExecuteNextAsync();

t.Wait();

var users = t.Result;
var user = users.FirstOrDefault();

user 为空。将文档更改为帕斯卡外壳或将 POCO 更改为使用驼峰外壳即可解决问题。当然,我不想要任何这些,因为我希望我的 JSON 对象和 C# 对象是 "standarized"。

如何让 DocumentDB SDK 使用驼峰式大小写来映射对象的 属性 名称,类似于 JSON.net?

DocumentDB LINQ 提供程序未获取 JsonConvert.DefaultSettings。通常,您可以使用 DefaultSettings 来控制驼峰式大小写,但对于您希望在 LINQ Where 子句中使用的那些属性,必须使用 DTO 上的 JsonProperty 属性显式设置名称。

public class User
{
    public string Id { get; set; }

    [JsonProperty("userName")]
    public string UserName { get; set; }
}

虽然有点单调乏味且容易产生错误,但它似乎是您目前唯一的选择。

在 Cosmos DB 的类似情况下,我能够在 class 声明级别为我的对象将所有属性设置为 Camel 大小写,如:

[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
public class User
{
    public string Id { get; set; }

    public string UserName { get; set; }
}

这就是您告诉 NewtonSoft.Json 使用 Camel 大小写进行序列化的方式。