代码之家  ›  专栏  ›  技术社区  ›  Cid Gordon

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

  •  1
  • Cid Gordon  · 技术社区  · 6 年前

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

    要反序列化它,我有一个类:

    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
    

    1 回复  |  直到 6 年前
        1
  •  5
  •   Jon Skeet    6 年前

    最简单的选择就是让它成为 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,但我希望您可能会很高兴处理它,就好像它丢失了一样。