首页 >后端开发 >C++ >如何使用 JsonConvert 检测 JSON 反序列化期间丢失的字段?

如何使用 JsonConvert 检测 JSON 反序列化期间丢失的字段?

Susan Sarandon
Susan Sarandon原创
2025-01-19 05:50:09396浏览

How Can I Detect Missing Fields During JSON Deserialization with JsonConvert?

使用JsonConvert检测反序列化期间缺失的字段

在使用Json.NET的JsonConvert类反序列化JSON对象时,处理缺失的字段对于确保数据完整性和一致性至关重要。默认情况下,MissingMemberHandling设置为Ignore,导致反序列化程序静默地为缺失的属性返回默认值。为了执行严格的验证并检测错误,请将MissingMemberHandling设置为Error。

示例

考虑以下代码:

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

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

    class Program
    {
        const string correctData = @"{ 'MyJsonInt': 42 }";

        const string wrongData = @"{ 'SomeOtherProperty': 'fbe8c20b' }";

        static void Main()
        {
            try
            {
                JsonSerializerSettings settings = new JsonSerializerSettings()
                {
                    MissingMemberHandling = MissingMemberHandling.Error
                };

                var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData, settings);
                Console.WriteLine(goodObj.MyJsonInt.ToString());

                var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings);
                Console.WriteLine(badObj.MyJsonInt.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.GetType().Name + ": " + ex.Message);
            }
        }
    }
}</code>

结果

将MissingMemberHandling设置为Error会在JSON数据中缺少属性时引发JsonSerializationException异常。

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

结论

通过将MissingMemberHandling配置为Error,Json.NET在反序列化期间强制严格遵守定义的类结构。这有助于识别和防止由于缺少字段而可能导致的数据丢失或损坏。

以上是如何使用 JsonConvert 检测 JSON 反序列化期间丢失的字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn