2016-11-03 78 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) 
    { 

    } 
} 
相关问题