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是子類。