Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengendalikan Medan Hilang Semasa Penyahserialisasian JSON dalam Json.NET?
Cara mengendalikan medan yang hilang semasa penyahserikatan JSON dalam Json.NET
Apabila menyahsiri objek JSON menggunakan Json.NET, adalah penting untuk mengendalikan medan yang hilang dengan betul. Secara lalai, Json.NET mengabaikan sifat yang hilang dan mengembalikan nilai lalai, yang boleh menyebabkan ralat semasa pemprosesan berikutnya.
Pertimbangkan kod berikut:
<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>
Kod ini cuba menyahsiri objek JSON menjadi objek MyJsonObjView. JSON yang betul mengandungi atribut "MyJsonInt", manakala JSON yang salah tidak. Outputnya adalah seperti berikut:
<code>42 0</code>
Seperti yang anda lihat, kod gagal secara senyap apabila menyahsiri JSON yang salah, mengembalikan nilai lalai untuk sifat yang hilang. Untuk mengelakkan tingkah laku sedemikian, kita boleh menggunakan tetapan MissingMemberHandling
.
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings(); settings.MissingMemberHandling = MissingMemberHandling.Error;</code>
Dengan menetapkan MissingMemberHandling
kepada Error
kami mengarahkan Json.NET untuk membuang pengecualian apabila sifat yang hilang ditemui semasa penyahserikatan.
<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>
Sekarang, jika kami menyahsiri JSON yang salah, kami akan mendapat pengecualian:
<code>JsonSerializationException: Could not find member 'SomeOtherProperty' on object of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
Pengecualian ini jelas menunjukkan bahawa penyahserikatan gagal disebabkan oleh atribut yang tiada, membolehkan kami mengendalikan ralat dengan sewajarnya.
Dengan menetapkan atribut MissingMemberHandling
, kami boleh mengawal tingkah laku Json.NET dengan lebih berkesan apabila menangani atribut JSON yang hilang, dengan itu mengelakkan kemungkinan ralat dan meningkatkan keteguhan kod kami.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Medan Hilang Semasa Penyahserialisasian JSON dalam Json.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!