属性 个名字的 Couchbase PascalCase JSON
Couchbase PascalCase JSON for property names
我们正在为 Couchbase 使用最新的 .NET 客户端,并注意到它将 属性 名称转换为驼峰式命名,而不是 PascalCase 中的原始名称。
这给我们带来了问题,因为在使用 N1QL 进行搜索时,如果 属性 名称的大小写不正确,查询不会 return 任何结果。
我确实找到了一篇关于如何指定某些 JSON 序列化程序设置的文章,但这是 2014 年写的,现在由于客户端已更改而无法使用。
任何人都可以建议我如何更改 JSON 序列化器以在原始/PascalCase 中序列化,或者如果我可以指定 N1QL 不用担心 属性 名称的大小写?
您可以在 N1QL 中指定 case-insensitive 搜索,如下所示:
SELECT `field1`i FROM my_bucket;
这将匹配 field1、FIELD1、Field1 和任何其他大小写。
另外,.NET 客户端不应修改您的字段名称。如果它这样做,那就是一个错误。
.NET 客户端确实在默认情况下将所有内容强制转换为 CamelCase (source)。
您可以在初始化 Cluster
对象时通过提供您自己的序列化程序来自定义此行为。您甚至可以从默认的 Newtonsoft 库切换到更高效的库,例如 ServiceStack 序列化程序。
您需要做的就是实现Couchbase.Core.Serialization.ITypeSerializer
接口并在Cluster
初始化期间提供工厂方法。这是 implementing a custom serializer, and here is an example of using it.
的示例
您实际上不需要实现自己的 Couchbase.Core.Serialization.ITypeSerializer
版本即可将驼峰式命名为 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,但如果您没有明确告诉它使用默认合同解析器,它将默认使用驼峰命名法:)
我们正在为 Couchbase 使用最新的 .NET 客户端,并注意到它将 属性 名称转换为驼峰式命名,而不是 PascalCase 中的原始名称。
这给我们带来了问题,因为在使用 N1QL 进行搜索时,如果 属性 名称的大小写不正确,查询不会 return 任何结果。
我确实找到了一篇关于如何指定某些 JSON 序列化程序设置的文章,但这是 2014 年写的,现在由于客户端已更改而无法使用。
任何人都可以建议我如何更改 JSON 序列化器以在原始/PascalCase 中序列化,或者如果我可以指定 N1QL 不用担心 属性 名称的大小写?
您可以在 N1QL 中指定 case-insensitive 搜索,如下所示:
SELECT `field1`i FROM my_bucket;
这将匹配 field1、FIELD1、Field1 和任何其他大小写。
另外,.NET 客户端不应修改您的字段名称。如果它这样做,那就是一个错误。
.NET 客户端确实在默认情况下将所有内容强制转换为 CamelCase (source)。
您可以在初始化 Cluster
对象时通过提供您自己的序列化程序来自定义此行为。您甚至可以从默认的 Newtonsoft 库切换到更高效的库,例如 ServiceStack 序列化程序。
您需要做的就是实现Couchbase.Core.Serialization.ITypeSerializer
接口并在Cluster
初始化期间提供工厂方法。这是 implementing a custom serializer, and here is an example of using it.
您实际上不需要实现自己的 Couchbase.Core.Serialization.ITypeSerializer
版本即可将驼峰式命名为 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,但如果您没有明确告诉它使用默认合同解析器,它将默认使用驼峰命名法:)