2011-11-02 53 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是子類。