2
我有一个问题,想知道这是否是或者是否将有可能与json.net反序列化使用Json.NET从超类继承的类?
我有一个超称为从它继承和两班,B1和B2 当我做了一个列表的类型A,然后添加一些B1和B2,在序列化和反序列化后,它们都是A类型。
是否有可能继承的每个类将被转换为其前类类型,如B1或B2?
我有一个问题,想知道这是否是或者是否将有可能与json.net反序列化使用Json.NET从超类继承的类?
我有一个超称为从它继承和两班,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.");
}
}
其中T是基类,R是子类。