Menggunakan Custom JSON.NET Converter Back -Sequentized Data Polymorphic JSON
Custom JSON.NET Converter menyediakan mekanisme yang kuat untuk menyesuaikan siri dan proses belakang. Ia membolehkan pemaju mengembangkan fungsi JSON.NET untuk memproses lebih banyak jenis data atau senario data yang lebih rumit.
Apabila adegan seperti itu muncul ketika berurusan dengan polimorfisme, pelbagai jenis warisan warisan. Pertimbangkan contoh berikut:
public class Person { public string FirstName { get; set; } public string LastName { get; set; } } public class Employee : Person { public string Department { get; set; } public string JobTitle { get; set; } } public class Artist : Person { public string Skill { get; set; } }
[ { "Department": "Department1", "JobTitle": "JobTitle1", "FirstName": "FirstName1", "LastName": "LastName1" }, { "Department": "Department2", "JobTitle": "JobTitle2", "FirstName": "FirstName2", "LastName": "LastName2" }, { "Skill": "Painter", "FirstName": "FirstName3", "LastName": "LastName3" } ]
dan mengenal pasti jenis tertentu setiap orang? List<Person>
Standard
) untuk membuat penukar tersuai kita sendiri: CustomCreationConverter
ReadJson
Create
Dalam adegan khusus kami, kami mencipta pengembangan JObject
public abstract class JsonCreationConverter<T> : JsonConverter { protected abstract T Create(Type objectType, JObject jObject); public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jObject = JObject.Load(reader); T target = Create(objectType, jObject); serializer.Populate(jObject.CreateReader(), target); return target; } }
JsonCreationConverter<Person>
Menggunakan penukar tersuai ini, kita dapat memperdalam rentetan JSON: PersonConverter
public class PersonConverter : JsonCreationConverter<Person> { protected override Person Create(Type objectType, JObject jObject) { if (FieldExists("Skill", jObject)) { return new Artist(); } else if (FieldExists("Department", jObject)) { return new Employee(); } else { return new Person(); } } private bool FieldExists(string fieldName, JObject jObject) { return jObject[fieldName] != null; } }
,
ataustring json = "[...]"; // 此处应替换为实际的JSON字符串 List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());
PersonConverter
Employee
Atas ialah kandungan terperinci Bagaimana untuk menghilangkan data JSON Polymorphic menggunakan penukar JSON.NET tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!