我们正在使用Couchbase的最新.NET客户端,并注意到它正在将属性名称转换为camelCase而不是PascalCase中的原始名称。
这导致我们出现问题,因为如果属性名称的大小写不正确,则使用N1QL进行搜索时,查询不会返回任何结果。
我确实找到了一篇关于如何指定一些JSON序列化程序设置的文章,但这是在2014年编写的,现在因为客户端已经更改而无法正常工作。
任何人都可以建议我如何更改JSON序列化程序以在原始/ PascalCase中序列化,或者如果我可以指定N1QL而不用担心属性名称的情况?
答案 0 :(得分:1)
.NET客户端确实默认将所有内容强制转换为CamelCase(source)。
您可以在初始化Cluster
对象时提供自己的序列化程序来自定义此行为。您甚至可以从默认的Newtonsoft lib切换到更高效的服务器,例如ServiceStack序列化器。
您需要做的就是实现Couchbase.Core.Serialization.ITypeSerializer
接口并在Cluster
初始化期间提供工厂方法。以下是implementing a custom serializer的示例,以下是using it的示例。
答案 1 :(得分:0)
您可以在N1QL中指定不区分大小写的搜索,如下所示:
SELECT `field1`i FROM my_bucket;
这将匹配field1,FIELD1,Field1和任何其他情况。
另外,.NET客户端不应该修改您的字段名称。如果它这样做,那就是一个错误。
答案 2 :(得分:0)
您真的不需要实现自己的Couchbase.Core.Serialization.ITypeSerializer
版本来从camelCase更改为PascalCase。如果你使用默认的序列化程序(Newtonsoft.JSON)就可以了,你可以在ClientConfiguration
:
return new ClientConfiguration
{
Servers = _servers.ToList(),
BucketConfigs = new Dictionary<string, BucketConfiguration>
{
{ "default", new BucketConfiguration
{
Password = _password,
UseSsl = false
}}
},
UseSsl = false,
Serializer = () => new DefaultSerializer(
new JsonSerializerSettings()
{
ContractResolver = new DefaultContractResolver()
},
new JsonSerializerSettings()
{
ContractResolver = new DefaultContractResolver()
}),
};
默认合同解析程序是PascalCase,但是如果你没有明确告诉它使用默认的合约解析程序,那么它将默认使用camelCase:)