Rumah > pembangunan bahagian belakang > C++ > Bagaimana Mengendalikan Medan Hilang Semasa Penyahserialisasian JSON dalam Json.NET?

Bagaimana Mengendalikan Medan Hilang Semasa Penyahserialisasian JSON dalam Json.NET?

Linda Hamilton
Lepaskan: 2025-01-19 05:44:12
asal
484 orang telah melayarinya

How to Handle Missing Fields During JSON Deserialization in 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:

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
    }
}
Salin selepas log masuk

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>
Salin selepas log masuk

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.

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Error;
Salin selepas log masuk

Dengan menetapkan MissingMemberHandling kepada Error kami mengarahkan Json.NET untuk membuang pengecualian apabila sifat yang hilang ditemui semasa penyahserikatan.

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);
}
Salin selepas log masuk

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>
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan