首頁 >後端開發 >C++ >如何使用 JsonConvert 檢測 JSON 反序列化期間遺失的欄位?

如何使用 JsonConvert 檢測 JSON 反序列化期間遺失的欄位?

Susan Sarandon
Susan Sarandon原創
2025-01-19 05:50:09398瀏覽

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