en utilisant un convertisseur JSON.net personnalisé - Données JSON polymorphes suivis
Le convertisseur JSON.NET personnalisé fournit un mécanisme puissant pour personnaliser le processus de sérialisation et de dossier de dos. Il permet aux développeurs d'élargir la fonction de JSON.net pour traiter des types ou des scénarios de données plus compliqués.
Lorsqu'une telle scène apparaît lorsqu'elle traite du polymorphisme, différents types d'hérédité de l'héritage. Considérez l'exemple suivant:
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" } ]
et identifier correctement le type spécifique de tout le monde? List<Person>
Standard <没有> ne fournit pas de méthode basée sur le contenu JSON pour déterminer le type correct. Cependant, nous pouvons réécrire la méthode <方法> et introduire une nouvelle méthode abstraite
(cette méthode accepte un) pour créer notre propre convertisseur personnalisé: CustomCreationConverter
ReadJson
Create
Dans notre scène spécifique, nous avons créé une expansion 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>
En utilisant ce convertisseur personnalisé, nous pouvons approfondir la chaîne 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; } }
,
oustring json = "[...]"; // 此处应替换为实际的JSON字符串 List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());
PersonConverter
Employee
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!