2014-06-26 91 views
1

我有一個類需要以自定義的方式序列化爲Couchbase中的JSON。所以,我做這樣的事情:Couchbase自定義反序列化

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

挖掘到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); 
    } 
} 
+0

鏈接不再工作:/ – cpsaez

+0

我不再與Couchbase工作,似乎有代碼已更改或重新構建。看看這些文件是否有助於你:[DefaultSerializer](https://github.com/couchbase/couchbase-net-client/blob/97abd1adee687543b9f6434cff1cd7fda90436e6/Src/Couchbase/Core/Serialization/DefaultSerializer.cs)和[ClientConfiguration ](https://github.com/couchbase/couchbase-net-client/blob/1ce46c243a520f901a94e557c6e396e15de909f1/Src/Couchbase/Configuration/Client/ClientConfiguration.cs) – Peter

+0

的確,現在的解決方案(對於未來的讀者)是讓你自己的序列化器實現ITypeSerializer,你仍然可以使用newtonSoft json,但是你需要將它包裝在自己的實現中。 http://blog.couchbase.com/2015/june/using-jil-for-custom-json-serialization-in-the-couchbase-.net-sdk – cpsaez