Maison >développement back-end >C++ >Comment désérialiser des collections d'instances d'interface à l'aide de JSON.NET ?
Désérialisation de collections d'instances d'interface
Lorsque vous tentez de sérialiser et de désérialiser une collection d'instances d'interface à l'aide de JSON.NET, il est important de prendre en compte la question de l'identification du type lors de la désérialisation. Le message d'erreur rencontré dans ce scénario indique qu'il n'est pas possible d'instancier directement une interface ou une classe abstraite.
Approche du classeur de type personnalisé
Une approche suggérée consiste à utiliser un classeur Type Resolver personnalisé. Cela implique de créer une classe personnalisée qui implémente l'interface ITypeResolver et de la fournir au JsonSerializer lors de la désérialisation. Le classeur personnalisé serait chargé de résoudre le type concret en fonction du type d'interface.
Paramètres par défaut de JSON.NET
Cependant, avec JSON.NET, il est possible pour réaliser la désérialisation sans avoir besoin de classeurs personnalisés. En ajustant les paramètres TypeNameHandling et TypeNameAssemblyFormat dans l'objet JsonSerializerSettings, JSON.NET peut gérer automatiquement l'identification de type pendant la sérialisation et la désérialisation.
Sérialisation
Lors de la sérialisation, spécifiez le suivant paramètres :
string serializedJson = JsonConvert.SerializeObject(objectToSerialize, Formatting.Indented, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple });
Désérialisation
Lors de la désérialisation, utilisez les paramètres suivants :
var deserializedObject = JsonConvert.DeserializeObject<ClassToSerializeViaJson>(serializedJson, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects });
Avec ces paramètres, JSON.NET sera automatiquement identifier les types concrets des instances d'interface en fonction des informations de type fournies lors de la sérialisation. Cela permet une désérialisation transparente des collections contenant des objets qui implémentent différentes interfaces.
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!