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

检测反序列化对象是否缺少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对象解析数据,然后使用键值查找检查参数,但我所使用的代码库使用上面的模式,如果可能,我希望保持一致。


拉莫斯之舞
浏览 873回答 3
3回答

犯罪嫌疑人X

将以下属性放在必需的属性上:[DataMember(IsRequired&nbsp;=&nbsp;true)]如果该成员不存在,则会抛出Newtonsoft.Json.JsonSerializationException。正如Brian在下面建议的那样,你的课堂上也需要这个属性:[DataContract]
打开App,查看更多内容
随时随地看视频慕课网APP