Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengendalikan Nilai Enum Tidak Diketahui Semasa Penyahserialisasian JSON dengan Json.net?

Bagaimana Mengendalikan Nilai Enum Tidak Diketahui Semasa Penyahserialisasian JSON dengan Json.net?

Linda Hamilton
Linda Hamiltonasal
2025-01-05 13:27:41928semak imbas

How to Handle Unknown Enum Values During JSON Deserialization with Json.net?

Mengabaikan Nilai Enum Tidak Diketahui Semasa Penyahserikatan JSON

Masalah:

Penyahserikatan JSON dengan Json. net boleh membuang pengecualian apabila menemui nilai enum yang tidak diketahui dalam data JSON. Ini berlaku apabila enum dibuat berdasarkan dokumentasi semasa, tetapi API pihak ketiga kemudian menambah nilai enum baharu.

Penyelesaian: Custom JsonConverter

Untuk menyelesaikan isu ini , JsonConverter tersuai boleh digunakan. Begini cara ia berfungsi:

  • Jika nilai JSON sepadan dengan enum (rentetan atau integer), ia digunakan.
  • Jika enum boleh dibatalkan, nilainya ditetapkan kepada nol.
  • Jika enum mempunyai nilai "Tidak diketahui", ia digunakan.
  • Jika tidak, nilai pertama enum digunakan.

Pelaksanaan Kod:

class TolerantEnumConverter : JsonConverter
{
    ... (Implementation from the provided answer)
}

Penggunaan:

Gunakan atribut [JsonConverter(typeof(TolerantEnumConverter))] kepada jenis enum untuk menggunakan adat penukar semasa penyahserikatan:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    ... (Enum values)
}

Contoh Demonstrasi:

Coretan kod berikut menunjukkan penggunaan TolerantEnumConverter dengan nilai enum dan JSON yang berbeza input:

string json = @"
{
    ... (JSON data with valid and invalid enum values)
}";

Foo foo = JsonConvert.DeserializeObject<Foo>(json);

foreach (PropertyInfo prop in typeof(Foo).GetProperties())
{
    object val = prop.GetValue(foo, null);
    Console.WriteLine(prop.Name + ": " + 
                     (val == null ? "(null)" : val.ToString()));
}

Output:

Output konsol menunjukkan cara TolerantEnumConverter mengendalikan nilai enum yang tidak diketahui, termasuk menetapkan nilai kepada "(null)", "Unknown" , atau menggunakan nilai pertama enum.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai Enum Tidak Diketahui Semasa Penyahserialisasian JSON dengan Json.net?. 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