我有一个问题,想知道它是否可以使用json.net
我有一个名为A的超类和两个继承它的类,B1和B2 当我创建一个A类型的列表然后添加一些B1和B2时,在序列化和反序列化之后它们都是A类。
是否有可能将每个继承的类转换为其以前的类类型,如B1或B2?
答案 0 :(得分: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是子类。