我有一个问题,想知道如果它是或如果它将是可能的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为子类。