Désérialisation de collections d'instances d'interface
Problème :
Lorsque vous essayez de désérialiser une collection de instances d'interface utilisant JSON.NET, l'erreur "Impossible de créer une instance de type ITestInterface. Le type est un interface ou classe abstraite et ne peut pas être instancié" se produit.
Solution :
Utilisation de la gestion des noms de types :
JSON. NET fournit un mécanisme appelé « Type Name Handling » pour gérer la désérialisation des instances d’interface. En spécifiant la propriété TypeNameHandling de l'objet JsonSerializerSettings à TypeNameHandling.Objects, JSON.NET sérialisera le nom de type de l'implémentation de l'interface avec les données JSON.
Pendant la désérialisation, JSON.NET utilisera le nom de type spécifié. pour créer l'instance appropriée de l'implémentation de l'interface. Le nom d'assembly du type peut également être spécifié pour une désérialisation plus précise en définissant la propriété TypeNameAssemblyFormat sur FormatterAssemblyStyle.Simple.
Code Exemple :
Sérialisation :
string serializedJson = JsonConvert.SerializeObject(objectToSerialize, Formatting.Indented, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple });
Désérialisation :
var deserializedObject = JsonConvert.DeserializeObject<ClassToSerializeViaJson>(serializedJson, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects });
En utilisant la gestion des noms de types , JSON.NET peut désérialiser efficacement des collections d'instances d'interface, garantissant ainsi que les implémentations correctes sont créées.
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!