用Json.NET反序列化继承自超类的类



我有一个问题,想知道如果它是或如果它将是可能的json.net

我有一个超类a和两个从它继承的类B1和B2当我创建一个a类型的列表,然后添加一些B1和B2,在序列化和反序列化之后,它们都是a类型的。

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

是的,它应该工作,只要你通知JSON。Net,您希望使用TypeNameHandling。所有和使用适当的铸造。以下是我项目中的作品:

 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为子类。

相关内容

  • 没有找到相关文章