关于azure cosmosdb:如何告诉DocumentDB SDK在linq查询期间使用camelCase?

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

考虑到存储在用户集合中的文档{"userName":"user1" }和以下User类:

1
2
3
4
5
public class User
{
        public string Id { get; set; }
        public string UserName { get; set; }
}

使用以下json.net设置:

1
2
3
4
5
6
7
JsonConvert.DefaultSettings = () =>
{
    return new JsonSerializerSettings
    {
       ContractResolver = new CamelCasePropertyNamesContractResolver(),
    };
};

当我以这样的方式查询Linq时:

1
2
3
4
5
6
7
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为空。将文档更改为具有pascal大小写,或者将poco更改为使用camel大小写,解决了这个问题。当然,我不希望这些对象中的任何一个,因为我希望JSON对象和C对象"标准化"。

如何告诉documentdb sdk使用camel大小写映射对象的属性名,类似于json.net?


documentdb linq提供程序未获取jsonconvert.defaultsettings。通常,您可以使用defaultsettings来控制camelcase,但是对于那些希望在linq where子句中使用的属性,必须使用DTO上的jsonproperty属性显式设置名称。

1
2
3
4
5
6
7
public class User
{
    public string Id { get; set; }

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

虽然有点乏味,而且是一个很好的bug源,但它似乎是您目前唯一的选择。