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:
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, }
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)")); }
Output:
NonNullableStatusWithValidStringValue: Set NonNullableStatusWithInvalidStringValue: Ready NullableStatusWithValidStringValue: Go NullableStatusWithInvalidStringValue: (null)
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!