作者:豆芽哥的马甲_206 | 来源:互联网 | 2022-12-01 11:10
我有这个JSON:
{
"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(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(json2);
Debug.WriteLine("Foo2 : " + MyObj2.Foo); //Foo2 : Another value
Debug.WriteLine("Bar2 : " + MyObj2.Bar); //Bar2 : 0
我怎样才能实现它?
1> Jon Skeet..:
最简单的选择是使其成为int?
属性,然后检查值是否为null:
public class SomeClass
{
public string Foo { get; set; }
public int? Bar { get; set; }
}
...
var deserialized = JsonConvert.DeserializeObject(json);
if (deserialized.Bar == null)
{
// Whatever you want to do if it wasn't set
}
当然,JSON可以显式地将值设置为null,但我希望您可能会乐意处理它,就像它丢失了一样.