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