Couchbase PascalCase JSON用于属性名称

时间:2015-12-31 14:27:03

标签: .net json.net couchbase

我们正在使用Couchbase的最新.NET客户端,并注意到它正在将属性名称转换为camelCase而不是PascalCase中的原始名称。

这导致我们出现问题,因为如果属性名称的大小写不正确,则使用N1QL进行搜索时,查询不会返回任何结果。

我确实找到了一篇关于如何指定一些JSON序列化程序设置的文章,但这是在2014年编写的,现在因为客户端已经更改而无法正常工作。

任何人都可以建议我如何更改JSON序列化程序以在原始/ PascalCase中序列化,或者如果我可以指定N1QL而不用担心属性名称的情况?

3 个答案:

答案 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:)