如何使用 JSON.NET 检查 JSON 中缺少的字段

How to check for missing field in JSON using JSON.NET

我有这个 JSON :

{
    "Foo": "A value",
    "Bar": 42
}

要反序列化它,我有这个 class :

public class SomeClass
{
    public string Foo { get; set; }
    public int Bar { get; set; }
}

我正在反序列化它:

string json1 = "{\"Foo\":\"A value\",\"Bar\":42}";
var MyObj1 = JsonConvert.DeserializeObject<SomeClass>(json1);
Debug.WriteLine("Foo1 : " + MyObj1.Foo); //Foo1 : A value
Debug.WriteLine("Bar1 : " + MyObj1.Bar); //Bar1 : 42

JSON.

中缺少某个字段时,我需要特殊处理

例如:

{
    "Foo": "Another value"
}

当使用与上面相同的代码时,Bar 设置为 0。它可能在原始 JSON 中设置为 0,所以我无法用这个值判断它是否是否存在。

string json2 = "{\"Foo\":\"Another value\"}";
var MyObj2 = JsonConvert.DeserializeObject<SomeClass>(json2);
Debug.WriteLine("Foo2 : " + MyObj2.Foo); //Foo2 : Another value
Debug.WriteLine("Bar2 : " + MyObj2.Bar); //Bar2 : 0

如何实现?

最简单的选择是将其设为 int? 属性,然后检查该值是否为空:

public class SomeClass
{
    public string Foo { get; set; }
    public int? Bar { get; set; }
}

...

var deserialized = JsonConvert.DeserializeObject<SomeClass>(json);
if (deserialized.Bar == null)
{
    // Whatever you want to do if it wasn't set
}

当然,JSON 可以显式 将该值设置为 null,但我希望您可能会很乐意处理它,就好像它丢失了一样。