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:
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()); } }
Penggunaan:
Untuk menggunakan penukar, hias sifat enum anda dengan atribut [JsonConverter]:
[JsonConverter(typeof(TolerantEnumConverter))] enum Status { Ready = 1, Set = 2, Go = 3 }
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!