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