Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich Sammlungen von Schnittstelleninstanzen mithilfe von JSON.NET?

Wie deserialisiere ich Sammlungen von Schnittstelleninstanzen mithilfe von JSON.NET?

Barbara Streisand
Barbara StreisandOriginal
2025-01-06 07:00:40362Durchsuche

How to Deserialize Collections of Interface Instances Using JSON.NET?

Sammlungen von Schnittstelleninstanzen deserialisieren

Beim Versuch, eine Sammlung von Schnittstelleninstanzen mithilfe von JSON.NET zu serialisieren und zu deserialisieren, ist es wichtig, Folgendes zu berücksichtigen das Problem der Typidentifikation während der Deserialisierung. Die in diesem Szenario aufgetretene Fehlermeldung weist darauf hin, dass es nicht möglich ist, eine Schnittstelle oder abstrakte Klasse direkt zu instanziieren.

Benutzerdefinierter Typbinder-Ansatz

Ein vorgeschlagener Ansatz umfasst die Verwendung von a benutzerdefinierter Typ-Resolver-Ordner. Dazu gehört das Erstellen einer benutzerdefinierten Klasse, die die ITypeResolver-Schnittstelle implementiert und diese während der Deserialisierung dem JsonSerializer zur Verfügung stellt. Der benutzerdefinierte Binder wäre für die Auflösung des konkreten Typs basierend auf dem Schnittstellentyp verantwortlich.

JSON.NET-Standardeinstellungen

Mit JSON.NET ist dies jedoch möglich um eine Deserialisierung zu erreichen, ohne dass benutzerdefinierte Bindemittel erforderlich sind. Durch Anpassen der TypeNameHandling- und TypeNameAssemblyFormat-Einstellungen im JsonSerializerSettings-Objekt kann JSON.NET die Typidentifizierung sowohl während der Serialisierung als auch der Deserialisierung automatisch verarbeiten.

Serialisierung

Geben Sie beim Serialisieren die an folgende Einstellungen:

string serializedJson = JsonConvert.SerializeObject(objectToSerialize, Formatting.Indented, new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.Objects,
    TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple
});

Deserialisierung

Verwenden Sie beim Deserialisieren die folgenden Einstellungen:

var deserializedObject = JsonConvert.DeserializeObject<ClassToSerializeViaJson>(serializedJson, new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.Objects
});

Mit diesen Einstellungen wird JSON.NET automatisch Identifizieren Sie die konkreten Typen der Schnittstelleninstanzen basierend auf den Typinformationen, die während der Serialisierung bereitgestellt werden. Dies ermöglicht eine nahtlose Deserialisierung von Sammlungen, die Objekte enthalten, die unterschiedliche Schnittstellen implementieren.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich Sammlungen von Schnittstelleninstanzen mithilfe von JSON.NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn