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
...)
有没有办法实现这个目标?
答案 0 :(得分:1)
使用.Parse()
将其解析为对象,然后进行强制转换,或使用.DeserializeObject<T>()
将其反序列化为对象。然后查看返回值是否正确,如果没有尝试其他的话。或者尝试使用标识符来查看它是哪种具体类型并挂钩到反序列化器。但这可能不是最理想的解决方案。
或者,如果您自己生成JSON,则可以使用设置。
new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }
当你序列化它时,它会将实际的具体类型写入JSON,当你反序列化它会将它转换为具体的类型。
JsonConvert.Deserialize(input, null, settings)
但是,也许有人有更好的主意。 :)