Couchbase自定义反序列化

时间:2014-06-26 08:49:40

标签: c# json serialization couchbase

我有一个类,我需要以自定义方式在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会重置设置,或者使用自己的设置。

1 个答案:

答案 0 :(得分: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);
    }
}