0
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...)

有没有办法做到这一点?

4

1 回答 1

1

用于.Parse()将其解析为对象然后强制转换,或用于.DeserializeObject<T>()将其反序列化为您的对象。然后查看返回值是否正确,如果不正确,请尝试其他方法。或者尝试使用标识符来查看它是哪种具体类型并挂钩到反序列化器。但这可能不是最理想的解决方案。

或者,如果您自己生成 JSON,则可以使用这些设置。

new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }

当你序列化它时,它会将实际的具体类型写入 JSON,当你反序列化它时,它会将它转换为具体类型。

JsonConvert.Deserialize(input, null, settings)

但是,也许有人有更好的主意。:)

于 2013-08-25T08:29:17.880 回答