【问题标题】:Deserialize JSON to C# collection将 JSON 反序列化为 C# 集合
【发布时间】:2014-06-05 11:43:32
【问题描述】:

我正在使用 Newtonsoft.Json 将我的 C# 对象序列化/反序列化到 JSON。 我的 C# 对象具有以下类型的属性:

List<BaseClass> objects { get; set; }

此集合包含不同的子对象(例如 - ChildClass1、ChildClass2)。

序列化为 JSON 工作正常,但在反序列化时它会在集合中创建 BaseClass 的对象(这很明显 :))。

有没有一种方法可以在反序列化时创建具体的子对象? 我尝试通过实现CustomCreationConverter&lt;BaseClass&gt; 创建自定义转换器。但问题是被覆盖的 Create 方法只给了我类型,并且基于此我无法决定返回哪个对象(ChildClass1 或 ChildClass2)

我的 JSON 字符串有一个 Type 属性,通过它我可以识别要创建的子对象。

非常感谢任何帮助。

【问题讨论】:

    标签: c# json serialization


    【解决方案1】:

    您可以使用TypeNameHandling 选项:

    var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }
    
    JsonConvert.SerializeObject(myObject, Formatting.Indented, settings );
    

    TypeNameHandling 选项“Auto”确保类型名称包含在序列化的 JSON 中 对于子类。但请注意:重命名类或其命名空间时,这些名称将失效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      相关资源
      最近更新 更多