Serialization 使用Json.NET反序列化从超类继承的类?

Serialization 使用Json.NET反序列化从超类继承的类?,serialization,json.net,Serialization,Json.net,我有一个问题,想知道json.net是否可以解决这个问题 我有一个名为a的超类和两个从中继承的类,B1和B2 当我列出类型a,然后添加一些B1和B2,在序列化和反序列化之后,它们都是类型a 是否每个继承的类都可能被强制转换为以前的类类型,如B1或B2?是的,只要您通知JSON.Net您想使用TypeNameHandling.All并使用适当的强制转换,它就会工作。我的项目中的以下工作: public class MembaseJsonSerializer<T> { pr

我有一个问题,想知道json.net是否可以解决这个问题

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


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

是的,只要您通知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.");
    }
 }
public类MembaseJsonSerializer
{
专用IContract解析器;
公共MembaseJsonSerializer(IContractResolver解析器)
{
this.resolver=解析器;
}
公共R-FromJson(对象json)
{
if(typeof(T).IsAssignableFrom(typeof(R)))
{
object res=JsonConvert.DeserializeObject(json.ToString(),新的JsonSerializerSettings(){
合同解析程序=解析程序,
TypeNameHandling=TypeNameHandling.All
});
返回(R)res;
}
抛出新的NotImplementedException(“类型不可赋值”);
}
公共字符串ToJson(对象obj)
{
if(typeof(T).IsAssignableFrom(obj.GetType())
{
string json=JsonConvert.SerializeObject(对象,格式化.None,新JsonSerializerSettings(){
合同解析程序=解析程序,
TypeNameHandling=TypeNameHandling.All
});
返回json;
}
抛出新的NotImplementedException(“类型不可赋值”);
}
}
其中T是基类,R是子类