首頁 >後端開發 >C++ >Json.NET 中 JSON 反序列化過程中如何處理缺失欄位?

Json.NET 中 JSON 反序列化過程中如何處理缺失欄位?

Linda Hamilton
Linda Hamilton原創
2025-01-19 05:44:12465瀏覽

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

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