Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menangani Ralat Penyahserialisasian JSON dengan Nilai Enum Tidak Padan?

Bagaimana untuk Menangani Ralat Penyahserialisasian JSON dengan Nilai Enum Tidak Padan?

Linda Hamilton
Lepaskan: 2024-12-31 17:20:12
asal
196 orang telah melayarinya

How to Handle JSON Deserialization Errors with Mismatched Enum Values?

Mengatasi Ralat Penyahserikatan JSON dengan Nilai Enum Tidak Diketahui

Apabila berurusan dengan penyiaran dan penyahserikatan JSON, bukan perkara biasa untuk menghadapi situasi di mana nilai enum anda tidak sepadan dengan nilai rentetan yang disediakan dalam sifat JSON. Ini boleh menyebabkan pengecualian dilemparkan semasa penyahserikatan, mengganggu aliran aplikasi anda.

Untuk menangani cabaran ini, kami boleh menggunakan JsonConverter tersuai dengan pengendalian nilai enum yang fleksibel. TolerantEnumConverter boleh mengendalikan pelbagai senario, membolehkan anda menyesuaikan tingkah laku berdasarkan keperluan anda.

Fungsi Penukar:

  • Jika nilai JSON sepadan dengan rentetan enum atau integer, ia digunakan secara langsung.
  • Untuk enum boleh null, null dikembalikan jika tiada padanan ditemui.
  • Jika enum mempunyai nilai "Tidak diketahui", ia digunakan jika tiada padanan lain ditemui.
  • Jika kedua-dua syarat ini tidak dipenuhi, yang pertama nilai enum dikembalikan.

Kod Contoh:

class TolerantEnumConverter : JsonConverter
{
    // Handle deserialization for enum types
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        // Get the underlying type for nullable types
        Type enumType = IsNullableType(objectType) ? Nullable.GetUnderlyingType(objectType) : objectType;

        // Attempt to match the JSON value to an enum value
        string[] names = Enum.GetNames(enumType);
        string enumText = reader.Value.ToString();

        string match = names
            .Where(n => string.Equals(n, enumText, StringComparison.OrdinalIgnoreCase))
            .FirstOrDefault();

        if (match != null)
        {
            return Enum.Parse(enumType, match);
        }

        // Handle nullable types
        if (IsNullableType(objectType))
        {
            return null;
        }

        // Handle enums with an "Unknown" value
        string defaultName = names
            .Where(n => string.Equals(n, "Unknown", StringComparison.OrdinalIgnoreCase))
            .FirstOrDefault();

        return Enum.Parse(enumType, defaultName ?? names.First());
    }
}
Salin selepas log masuk

Penggunaan:

Untuk menggunakan penukar, hias sifat enum anda dengan atribut [JsonConverter]:

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

Dengan memanfaatkan TolerantEnumConverter, anda boleh memastikan aplikasi anda mengendalikan nilai enum dengan baik ketidakpadanan semasa penyahserikatan JSON, mencegah ralat yang tidak perlu dan mengekalkan integriti data.

Atas ialah kandungan terperinci Bagaimana untuk Menangani Ralat Penyahserialisasian JSON dengan Nilai Enum Tidak Padan?. 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