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

回答:

Json.Net串行器具有MissingMemberHandling可以设置为的设置Error。(默认值为Ignore。)这将导致序列化程序JsonSerializationException在遇到目标类中没有对应属性的JSON属性时,在反序列化期间引发。

static void Main(string[] args)

{

try

{

JsonSerializerSettings settings = new JsonSerializerSettings();

settings.MissingMemberHandling = MissingMemberHandling.Error;

var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData, settings);

System.Console.Out.WriteLine(goodObj.MyJsonInt.ToString());

var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings);

System.Console.Out.WriteLine(badObj.MyJsonInt.ToString());

}

catch (Exception ex)

{

Console.WriteLine(ex.GetType().Name + ": " + ex.Message);

}

}

结果:

42

JsonSerializationException: Could not find member 'SomeOtherProperty' on object

of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.

请参阅:MissingMemberHandling设置。

以上是 使用Json.NET中的JsonConvert类检测反序列化的对象是否缺少字段 的全部内容, 来源链接: utcz.com/qa/425807.html

回到顶部