如何让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 大小写进行序列化的方式。
考虑到用户集合中存储的文档 { "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 大小写进行序列化的方式。