属性名称的Couchbase PascalCase JSON



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

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

我确实找到了一篇关于如何指定一些JSON序列化程序设置的文章,但这篇文章是在2014年写的,现在由于客户端的变化而无法工作。

有人能告诉我如何将JSON序列化程序更改为在原始/PascalCase中序列化,或者我是否可以指定为N1QL,以不用担心属性名的大小写吗?

.NET客户端在默认情况下(源代码)确实会强制所有内容进入CamelCase。

您可以通过在初始化Cluster对象时提供自己的序列化程序来自定义此行为。您甚至可以从默认的Newtonsoftlib切换到更高效的东西,比如ServiceStack序列化程序。

您所需要做的就是在Cluster初始化期间实现Couchbase.Core.Serialization.ITypeSerializer接口并提供工厂方法。下面是一个实现自定义序列化程序的示例,也是一个使用它的示例

您可以在N1QL中指定不区分大小写的搜索,如下所示:

SELECT `field1`i FROM my_bucket;

这将匹配字段1、field1、字段1和任何其他情况。

另外,.NET客户端不应该修改您的字段名。如果它这样做,那就是一个错误。

您实际上不需要实现自己版本的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作为默认:)

相关内容

  • 没有找到相关文章

最新更新