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

Bagaimana Mengendalikan Nilai Enum Tidak Diketahui dengan Anggun Semasa Penyahserialisasian JSON?

Barbara Streisand
Lepaskan: 2025-01-01 11:02:09
asal
743 orang telah melayarinya

How to Gracefully Handle Unknown Enum Values During JSON Deserialization?

Mengabaikan Nilai Enum Tidak Diketahui Semasa Penyahserikatan JSON

Apabila anda menyahsiri data JSON ke dalam enum, anda mungkin menghadapi situasi di mana sifat JSON mengandungi nilai yang tidak sepadan dengan mana-mana nilai enum sedia ada. Secara lalai, ini boleh menyebabkan ralat.

TolerantEnumConverter to the Rescue

Untuk mengendalikan perkara ini dengan anggun, anda boleh menggunakan JsonConverter tersuai yang dipanggil TolerantEnumConverter. Penukar ini menyediakan pendekatan yang fleksibel untuk mengendalikan nilai enum yang tidak diketahui dengan mentakrifkan satu set peraturan:

  1. Jika nilai JSON sepadan dengan nilai enum sedia ada, ia digunakan.
  2. Jika enum ialah nullable dan nilai JSON adalah null, ia ditetapkan kepada null.
  3. Jika enum mempunyai nilai yang dipanggil "Tidak diketahui," ia digunakan.
  4. Jika tidak, nilai pertama enum digunakan.

Butiran Pelaksanaan

TolerantEnumConverter mengendalikan kedua-dua rentetan dan nilai integer dalam JSON. Ia menyemak padanan berdasarkan perbandingan rentetan tidak sensitif huruf besar atau kehadiran dalam set nilai enum.

Contoh Penggunaan

Untuk menggunakan TolerantEnumConverter, anotasi sifat enum anda dengan atribut [JsonConverter(typeof(TolerantEnumConverter))]. Berikut ialah contoh:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    Ready = 1,
    Set = 2,
    Go = 3,
}
Salin selepas log masuk

Aplikasi Demo

Aplikasi demo berikut menunjukkan cara menggunakan TolerantEnumConverter untuk mengendalikan kedua-dua tidak boleh dibatalkan dan tidak boleh dibatalkan enums:

// Sample JSON data
string json = @"
{
    ""NonNullableStatusWithValidStringValue"" : ""Set"",
    ""NonNullableStatusWithInvalidStringValue"" : ""Blah"",
    ""NullableStatusWithValidStringValue"" : ""Go"",
    ""NullableStatusWithInvalidStringValue"" : ""Blah"",
}";

// Deserialize JSON data into Foo object
Foo foo = JsonConvert.DeserializeObject<Foo>(json, new JsonSerializerSettings
{
    Converters = { new TolerantEnumConverter() }
});

// Output the deserialized values
foreach (PropertyInfo prop in typeof(Foo).GetProperties())
{
    Console.WriteLine(prop.Name + ": " + (prop.GetValue(foo) ?? "(null)"));
}
Salin selepas log masuk

Output:

NonNullableStatusWithValidStringValue: Set
NonNullableStatusWithInvalidStringValue: Ready
NullableStatusWithValidStringValue: Go
NullableStatusWithInvalidStringValue: (null)
Salin selepas log masuk

Kesimpulan

TolerantEnumConverter menyediakan cara mudah untuk menyahsiri data JSON menjadi enum tanpa menghadapi ralat untuk nilai yang tidak diketahui. Ia menawarkan tingkah laku yang boleh disesuaikan untuk memenuhi keperluan khusus anda.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai Enum Tidak Diketahui dengan Anggun Semasa Penyahserialisasian JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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