Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membuat Pengecualian Lemparan Json.NET untuk Medan Hilang Semasa Penyahserikatan?

Bagaimanakah Saya Boleh Membuat Pengecualian Lemparan Json.NET untuk Medan Hilang Semasa Penyahserikatan?

Linda Hamilton
Linda Hamiltonasal
2025-01-19 05:59:10730semak imbas

How Can I Make Json.NET Throw Exceptions for Missing Fields During Deserialization?

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!

Kenyataan:
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