2011-11-02 54 views
2

我有一个问题,想知道这是否是或者是否将有可能与json.net反序列化使用Json.NET从超类继承的类?

我有一个超称为从它继承和两班,B1和B2 当我做了一个列表的类型A,然后添加一些B1和B2,在序列化和反序列化后,它们都是A类型。

是否有可能继承的每个类将被转换为其前类类型,如B1或B2?

回答

3

是的,只要您通知JSON.Net您想使用TypeNameHandling.All并使用适当的强制转换,它就会工作。以下作品在我的项目中:

public class MembaseJsonSerializer<T> 
{ 
    private IContractResolver resolver; 

    public MembaseJsonSerializer(IContractResolver resolver) 
    { 
     this.resolver = resolver; 
    } 


    public R FromJson<R>(object json) 
    { 
     if (typeof(T).IsAssignableFrom(typeof(R))) 
     { 
      object res = JsonConvert.DeserializeObject(json.ToString(), new JsonSerializerSettings() { 
       ContractResolver = resolver, 
       TypeNameHandling = TypeNameHandling.All 
      }); 
      return (R)res; 
     } 
     throw new NotImplementedException("Type is not assignable."); 
    } 

    public string ToJson(object obj) 
    { 
     if (typeof(T).IsAssignableFrom(obj.GetType())) 
     { 
      string json = JsonConvert.SerializeObject(obj, Formatting.None, new JsonSerializerSettings() { 
       ContractResolver = resolver, 
       TypeNameHandling = TypeNameHandling.All 
      }); 
      return json; 
     } 
     throw new NotImplementedException("Type is not assignable."); 
    } 
} 

其中T是基类,R是子类。