【问题标题】:Custom null handling with JSON.NET deserialization使用 JSON.NET 反序列化自定义 null 处理
【发布时间】: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 中表示空值的默认方式,并且我还有其他(相关)类都以这种方式工作。

【问题讨论】:

    标签: c# json.net


    【解决方案1】:

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

    if (myObject.child.ID == NULL)
    {
        myObject.child = NULL;
    }
    

    【讨论】:

    • 我有几个类和各种属性都表现出这种行为——一个常见的元素是“ID”=“NULL”,所以我希望在它出现的任何地方检测到它。
    猜你喜欢
    • 2014-09-05
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多