【问题标题】:Couchbase custom deserializationCouchbase 自定义反序列化
【发布时间】:2014-06-26 08:49:40
【问题描述】:

我有一个类需要以自定义方式在 Couchbase 中序列化为 JSON。所以我做了类似的事情:

var converters = new[] { new CustomConverter() };
var json = JsonConvert.SerializeObject(myObject, jsonConverters.ToArray()); 
var result = _couchbaseClient.ExecuteStore(StoreMode.Add, id, json);

但是如何使用CustomConverter 再次反序列化?我想检索 JSON 并自己进行反序列化。我知道有一个 ExecuteGet 方法,但我想通过视图工作。

这可能吗?

我尝试将我的转换器添加到JsonConvert.DefaultSettings,但它似乎没有使用它。我不断收到JsonSerializationException。我猜 Couchbase 会重置设置,或者使用自己的设置。

【问题讨论】:

    标签: c# json serialization couchbase


    【解决方案1】:

    深入研究 Couchbase 代码,我找到了它。 Couchbase 有一些使用自己的设置的扩展方法。你可以看到这个on GitHub

    public static class CouchbaseClientExtensions
    {
        public static JsonSerializerSettings JsonSerializerSettings;
    
        static CouchbaseClientExtensions()
        {
            JsonSerializerSettings = new JsonSerializerSettings
                {
                    ContractResolver = new DocumentIdContractResolver()
                };
        }
    
        // ...
    
        private static string SerializeObject(object value)
        {
            var json = JsonConvert.SerializeObject(value,
                                    Formatting.None,
                                    JsonSerializerSettings);
            return json;
        }
    }
    

    所以你可以像这样添加自己的转换器:

    foreach (var jsonConverter in jsonConverters)
    {
        if (!CouchbaseClientExtensions
                 .JsonSerializerSettings
                 .Converters.Any(x => x.GetType() == jsonConverter.GetType()))
        {
            CouchbaseClientExtensions
                .JsonSerializerSettings
                .Converters.Add(jsonConverter);
        }
    }
    

    【讨论】:

    • 我不再与 Couchbase 合作,似乎代码已更改或重组。查看这些文件是否对您有帮助:DefaultSerializerClientConfiguration
    • 没错,现在的解决方案(对于未来的读者)是让你自己的序列化器实现 ITypeSerializer,你仍然可以使用 newtonSoft json,但你需要将它包装在你自己的实现中。 blog.couchbase.com/2015/june/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多