Mengesan medan yang hilang semasa penyahserikatan JSON menggunakan Json.NET
Dalam penyahserialisasian JSON, pengendalian medan yang hilang adalah penting. Secara lalai, penyeri bersiri Json.NET secara senyap mengembalikan nilai lalai apabila ia menemui medan yang hilang. Tingkah laku ini boleh menyebabkan ralat tidak dapat dikesan apabila menyahsiri objek dengan sifat yang salah.
Soalan:
Anda menghadapi masalah di mana penyeri Json.NET tidak membuang pengecualian apabila menyahsiri objek dengan medan yang hilang. Sebaliknya, ia mengembalikan nilai lalai, yang menjadikannya sukar untuk mengesan data yang salah.
Penyelesaian:
Json.NET menyediakan tetapan MissingMemberHandling
boleh dikonfigurasikan. Dengan menetapkannya kepada Error
, anda mengarahkan penyiri untuk menaikkan JsonSerializationException
apabila medan yang hilang ditemui semasa penyahserikatan. Dengan cara ini anda boleh mengendalikan ralat sedemikian secara eksplisit dalam kod anda.
Kod:
<code class="language-csharp">using Newtonsoft.Json; try { // 读取JSON字符串 const string correctData = @"{ 'MyJsonInt': 42 }"; const string wrongData = @"{ 'SomeOtherProperty': 'fbe8c20b' }"; // 创建序列化器设置 JsonSerializerSettings settings = new JsonSerializerSettings(); settings.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>
Output:
<code>42 JsonSerializationException: Could not find member 'SomeOtherProperty' on object of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
Dengan menetapkan MissingMemberHandling
kepada Error
kami memastikan bahawa penyeri bersiri akan membuang JsonSerializationException
untuk objek yang tiada medan, membolehkan anda mengendalikan ralat dan memastikan integriti data.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Pengecualian Lemparan Json.NET untuk Medan Hilang Semasa Penyahserikatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!