Maison >développement back-end >C++ >Comment désérialiser des collections d'instances d'interface à l'aide de JSON.NET ?

Comment désérialiser des collections d'instances d'interface à l'aide de JSON.NET ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-06 07:00:40362parcourir

How to Deserialize Collections of Interface Instances Using 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn