我们说我有以下内容:
public class Parent
{
public string Id;
}
public class FirstChild:Parent
{
public string FirstName;
}
public class SecondChild:Parent
{
public string LastName;
}
我有一个类型为FirstChild
或SecondChild
的Json,如何将其反序列化为合适的类型,而无需检查序列化JSON的内容,因为我知道我无法控制序列化过程?
我已经尝试了here提到的解决方案,但我得到的是Parent
对象(孩子的字段已经消失)。
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
var deserialized = JsonConvert.DeserializeObject<Parent>(
Serialized FirstChild/SecondChild,
settings);
Json样本:
{\"firstName\":\"John\",\"id\":\"1\"}
答案 0 :(得分:2)
要使用Newtonsoft.Json正确反序列化派生类型,JSON字符串需要包含名称为$type
的元素和包含类型名称的值。例如,正确序列化的FirstChild
对象将如下所示:
{
"$type": "Your.Name.Space.FirstChild, Your.Name.Space",
"FirstName": "Blah",
"Id": "1"
}
为此,请确保使用TypeNameHandling.All
序列化:
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
var json = JsonConvert.SerializeObject(yourFirstParentObject, settings);
现在您的反序列化代码将正常运行。