首页 > 后端开发 > C++ > 如何在使用 Json.NET 进行 JSON 反序列化期间检测未定义的属性?

如何在使用 Json.NET 进行 JSON 反序列化期间检测未定义的属性?

DDD
发布: 2025-01-19 02:51:08
原创
701 人浏览过

How Can I Detect Undefined Properties During JSON Deserialization with Json.NET?

使用Json.NET检测反序列化后的未定义属性

在基于JSON的应用程序中,有效处理反序列化错误至关重要。虽然Json.NET的默认行为是静默回退到默认值,但在某些情况下需要抛出异常。

为了满足这一需求,Json.NET提供了MissingMemberHandling设置。通过将此属性设置为Error,任何尝试反序列化JSON属性而没有相应模型属性的操作都将触发JsonSerializationException

考虑以下代码:

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

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

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

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

            try
            {
                JsonSerializerSettings settings = new JsonSerializerSettings
                {
                    MissingMemberHandling = MissingMemberHandling.Error
                };

                var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings);
                Console.WriteLine(badObj.MyJsonInt);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{ex.GetType().Name}: {ex.Message}");
            }
        }
    }
}</code>
登录后复制

使用此修改后的代码,wrongData对象的反序列化现在将导致以下错误:

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

此错误消息清楚地指出了导致反序列化失败的属性,从而提高了调试效率。通过使用MissingMemberHandling设置,您可以在反序列化期间强制执行严格的属性验证,以确保数据完整性。

以上是如何在使用 Json.NET 进行 JSON 反序列化期间检测未定义的属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

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