首页 > 后端开发 > C++ > Json.NET 中 JSON 反序列化过程中如何处理缺失字段?

Json.NET 中 JSON 反序列化过程中如何处理缺失字段?

Linda Hamilton
发布: 2025-01-19 05:44:12
原创
421 人浏览过

How to Handle Missing Fields During JSON Deserialization in Json.NET?

Json.NET 中处理 JSON 反序列化期间缺失字段的方法

在使用 Json.NET 反序列化 JSON 对象时,正确处理缺失字段至关重要。默认情况下,Json.NET 会忽略缺失的属性并返回默认值,这可能会在后续处理过程中导致错误。

考虑以下代码:

<code class="language-csharp">using Newtonsoft.Json;

namespace Json_Fail_Test
{
    [JsonObject(MemberSerialization.OptOut)]
    private class MyJsonObjView
    {
        [JsonProperty("MyJsonInt")]
        public int MyJsonInt { get; set; }
    }

    static void Main(string[] args)
    {
        string correctData = @"{'MyJsonInt': 42}";
        string wrongData = @"{'SomeOtherProperty': 'fbe8c20b'}";

        var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData);
        var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData);

        Console.WriteLine(goodObj.MyJsonInt); // 输出 42
        Console.WriteLine(badObj.MyJsonInt); // 输出 0
    }
}</code>
登录后复制

这段代码尝试将 JSON 对象反序列化为 MyJsonObjView 对象。正确的 JSON 包含 "MyJsonInt" 属性,而错误的 JSON 则没有。输出结果如下:

<code>42
0</code>
登录后复制

如您所见,代码在反序列化错误的 JSON 时会静默失败,为缺失的属性返回默认值。为避免此类行为,我们可以使用 MissingMemberHandling 设置。

<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Error;</code>
登录后复制

通过将 MissingMemberHandling 设置为 Error,我们指示 Json.NET 在反序列化期间遇到缺失属性时抛出异常。

<code class="language-csharp">try
{
    var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData, settings);
    var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings);
}
catch (Exception ex)
{
    Console.WriteLine(ex.GetType().Name + ": " + ex.Message);
}</code>
登录后复制

现在,如果我们反序列化错误的 JSON,将会得到一个异常:

<code>JsonSerializationException: Could not find member 'SomeOtherProperty' on object
of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
登录后复制

此异常清楚地表明反序列化由于缺失属性而失败,使我们能够适当地处理错误。

通过设置 MissingMemberHandling 属性,我们可以更有效地控制 Json.NET 在处理缺失 JSON 属性时的行为,从而避免潜在的错误和提高代码的健壮性。

以上是Json.NET 中 JSON 反序列化过程中如何处理缺失字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板