2016-11-03 119 views
0

我試圖從服務器發送數據到客戶端時序列化和反序列化Dictionary<string, int>類型的屬性。Json.Net無法反序列化具有多個泛型類型的對象?

所以,如果我這個序列化對象的簡化:

class Foo 
{ 
    public Dictionary<string, int> Bar { get; set; } 
} 

我得到這個漂亮的JSON(使用TypeNameHandling.All):

{ 
    "$type": "Foo", 
    "Bar": { 
    "$type": "Dictionary<String, Int32>" 
    } 
} 

的問題是在反序列化一側我使用自定義的Binder來覆蓋BindToType以反序列化。但是當這樣做時,typeName是不正確的,而我得到"Dictionary<String"

public override Type BindToType(string assemblyName, string typeName) 
{ 
    if (typeName == "Dictionary<String, Int32>") 
    { 
    // I never get here because typeName is "Dictionary<String" 
    return typeof(Dictionary<string, int>); 
    } 
    // ... 
} 
+0

你爲什麼不使用JsonConverers反序列化/ –

+0

@Amit庫馬爾戈什歡迎你,如果你想發佈一個例子作爲一個答案。但要記住;大多數時候我不知道在反序列化方面期望什麼類型的對象。 – einord

+2

請發表[mcve]。 –

回答

0

可以解串做這樣的事情 -

class customBinder : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return true; 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     var type = Activator.CreateInstance(objectType); 
     var data = JObject.Load(reader); 

     var obj = JsonConvert.DeserializeObject(data.ToString(), type.GetType(), new JsonSerializerSettings 
     { 
      TypeNameHandling = TypeNameHandling.All 
     }); 

     return obj; 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 

    } 
} 
相關問題