首頁 >後端開發 >C++ >如何在使用 Json.NET 進行 JSON 反序列化期間檢測未定義的屬性?

如何在使用 Json.NET 進行 JSON 反序列化期間檢測未定義的屬性?

DDD
DDD原創
2025-01-19 02:51:08704瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn