mari kita pertimbangkan contoh, di mana anda mempunyai orang kelas asas dan dua pekerja dan artis yang diperolehi. Anda mempunyai senarai objek orang yang perlu bersiri sebagai JSON. Walau bagaimanapun, anda ingin mengelakkan menggunakan typenameHandling. Di sinilah JsonConverter adat boleh memainkan peranan.
Atas sebab ini, kita perlu menentukan personconverter penukar adat, yang memperluaskan JsonCreationverter
. Dalam kaedah membuat penukar, kita boleh menganalisis objek JSON untuk menentukan jenis derivatif yang betul mengikut kewujudan bidang tertentu.
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; } }
objek, anda boleh menggunakan penukar tersuai:
string json = "[...]"; List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());
Atas ialah kandungan terperinci Bagaimana untuk membuat jsonconverter tersuai di json.net untuk mengendalikan siri polimorfik tanpa typenameHandling?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!