检测反序列化对象是否缺少Json.NET中JsonConvert类的字段我正在尝试使用Json.NET反序列化一些JSON对象。但是我发现,当我反序列化一个没有我正在寻找的属性的对象时,不会抛出任何错误,但是当我访问它们时,会返回属性的默认值。重要的是我能够检测到何时反序列化了错误类型的对象。示例代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Newtonsoft.Json;namespace Json_Fail_Test{
class Program
{
[JsonObject(MemberSerialization.OptOut)]
private class MyJsonObjView
{
[JsonProperty("MyJsonInt")]
public int MyJsonInt { get; set; }
}
const string correctData = @"
{
'MyJsonInt': 42
}";
const string wrongData = @"
{
'SomeOtherProperty': 'fbe8c20b'
}";
static void Main(string[] args)
{
var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData);
System.Console.Out.WriteLine(goodObj.MyJsonInt.ToString());
var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData);
System.Console.Out.WriteLine(badObj.MyJsonInt.ToString());
}
}}该程序的输出是:42 0我宁愿抛出一个例外来默默地失败。没有办法检测序列化是否找不到参数?我知道我可以使用Json对象解析数据,然后使用键值查找检查参数,但我所使用的代码库使用上面的模式,如果可能,我希望保持一致。
3 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
将以下属性放在必需的属性上:
[DataMember(IsRequired = true)]
如果该成员不存在,则会抛出Newtonsoft.Json.JsonSerializationException。
正如Brian在下面建议的那样,你的课堂上也需要这个属性:
[DataContract]
- 3 回答
- 0 关注
- 870 浏览
添加回答
举报
0/150
提交
取消