【问题标题】: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)
    

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

    【讨论】:

      猜你喜欢
      • 2014-01-01
      • 1970-01-01
      • 2017-05-26
      • 2022-07-08
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多