【问题标题】:JSON Deserialize complex derived object using Newtonsoft JSON.NET [duplicate]JSON使用Newtonsoft JSON.NET反序列化复杂的派生对象[重复]
【发布时间】:2013-08-25 08:17:40
【问题描述】:
class Packet
{
public Action{get;set;}
}
class Action
{
string Type;
}
class ConcreteAction1 : Action
{
base.Type="ConcreteAction1";
}
class ConcreteAction2 : Action
{
base.Type="ConcreteAction2";
}
我收到Packet 类,其中包含来自Action 类的各种派生类,默认情况下,每个ConcreteActions 都被反序列化为基类Action,但我希望它们被反序列化为它们的实际类型(ConcreteAction1 ,ConcreteAction2 ...)
有没有办法做到这一点?
【问题讨论】:
标签:
c#
.net
json
serialization
json.net
【解决方案1】:
使用.Parse() 将其解析为对象然后进行强制转换,或者使用.DeserializeObject<T>() 将其反序列化为您的对象。然后查看返回值是否正确,如果不正确,请尝试其他方法。或者尝试使用标识符来查看它是哪种具体类型并挂钩到反序列化器。但这可能不是最理想的解决方案。
或者,如果您自己生成 JSON,则可以使用设置。
new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }
当你序列化它时,它会将实际的具体类型写入 JSON,当你反序列化它时,它会将它转换为具体类型。
JsonConvert.Deserialize(input, null, settings)
但是,也许有人有更好的主意。 :)