为了账号安全,请及时绑定邮箱和手机立即绑定

检测反序列化对象是否缺少Json.NET中JsonConvert类的字段

检测反序列化对象是否缺少Json.NET中JsonConvert类的字段

拉莫斯之舞 2019-08-23 09:31:07
检测反序列化对象是否缺少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]


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 870 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信