Cid*_*Cid 1 c# json json.net json-deserialization
我有这个JSON:
{
"Foo": "A value",
"Bar": 42
}
Run Code Online (Sandbox Code Playgroud)
要反序列化它,我有这个类:
public class SomeClass
{
public string Foo { get; set; }
public int Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下方法对其进行反序列化:
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
Run Code Online (Sandbox Code Playgroud)
当JSON中缺少字段时,我需要特定的处理方法.
例如:
{
"Foo": "Another value"
}
Run Code Online (Sandbox Code Playgroud)
当使用与上面相同的代码时,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
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现它?
最简单的选择是使其成为int?属性,然后检查值是否为null:
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
}
Run Code Online (Sandbox Code Playgroud)
当然,JSON可以显式地将值设置为null,但我希望您可能会乐意处理它,就像它丢失了一样.