使用 JSON.NET 反序列化自定义 null 处理

Posted

技术标签:

【中文标题】使用 JSON.NET 反序列化自定义 null 处理【英文标题】:Custom null handling with JSON.NET deserialization 【发布时间】:2015-05-14 18:19:21 【问题描述】:

我有以下 JSON:

[
    
      "ID": "Test1234",
      "Child": 
        "ID": "NULL"
      
    ,
    
      "ID" : "Test1235",
      "Child": 
         "ID" : "Test1234"
      
    
]

我已将其映射到以下 C# 类:

[JsonObject]
public class MyExample

    string ID;
    MyExample Child;

这有两个对象来模拟父/子关系。第一个对象Test1234 应该没有Child (null)。相反,json.net(正确地)将Child 反序列化为MyExample 对象,其中ID 为“NULL”。这是我想要的行为:

var myObjects = JsonConvert.DeserializeObject<List<MyExample>>(jsonText);
Assert.AreEqual("Test1234", myObjects[0].ID);
Assert.IsNull(myObjects[0].Child);

Assert.AreEqual("Test1235", myObjects[1].ID);
Assert.AreEqual("Test1234", myObjects[1].child.ID);

有没有一种简单的方法来指定属性的 null 处理?这是在我正在使用的 API 中表示空值的默认方式,并且我还有其他(相关)类都以这种方式工作。

【问题讨论】:

【参考方案1】:

您也许可以编写自定义代码来检测 ID 何时为 NULL,然后简单地将 Child 分配给 NULL。这很简单,应该只是几行代码。像这样的:

if (myObject.child.ID == NULL)

    myObject.child = NULL;

【讨论】:

我有几个类和各种属性都表现出这种行为——一个常见的元素是“ID”=“NULL”,所以我希望在它出现的任何地方检测到它。

以上是关于使用 JSON.NET 反序列化自定义 null 处理的主要内容,如果未能解决你的问题,请参考以下文章

使用 Json.NET 自定义反序列化

如何使用 Json.Net 序列化/反序列化具有附加属性的自定义集合

如何使用 Json.Net 序列化/反序列化带有自定义键的字典?

JSON.Net无法在自定义JsonConverter中反序列化json数组

如何使用json.net自定义反序列化为对象

如何使用 Json.NET 反序列化高精度十进制值?