ホームページ >バックエンド開発 >C++ >JSON.NET を使用してインターフェイス インスタンスのコレクションを逆シリアル化する方法

JSON.NET を使用してインターフェイス インスタンスのコレクションを逆シリアル化する方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-06 07:00:40397ブラウズ

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

インターフェイス インスタンスのコレクションの逆シリアル化

JSON.NET を使用してインターフェイス インスタンスのコレクションをシリアル化および逆シリアル化しようとする場合、次の点に対処することが重要です。逆シリアル化中の型識別の問題。このシナリオで発生するエラー メッセージは、インターフェイスまたは抽象クラスを直接インスタンス化できないことを示しています。

カスタム タイプ バインダーによるアプローチ

提案されるアプローチの 1 つは、カスタムタイプリゾルバーバインダー。これには、ITypeResolver インターフェイスを実装するカスタム クラスの作成と、逆シリアル化中にそれを JsonSerializer に提供することが含まれます。カスタム バインダーは、インターフェイスの型に基づいて具象型を解決する役割を果たします。

JSON.NET のデフォルト設定

ただし、JSON.NET では、それが可能です。カスタム バインダーを必要とせずに逆シリアル化を実現します。 JsonSerializerSettings オブジェクトの TypeNameHandling および TypeNameAssemblyFormat 設定を調整することで、JSON.NET はシリアル化と逆シリアル化の両方で型の識別を自動的に処理できます。

シリアル化

シリアル化するときは、続く設定:

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

逆シリアル化

逆シリアル化するときは、次の設定を使用します:

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

これらの設定により、JSON.NET は自動的にシリアル化中に提供される型情報に基づいて、インターフェイス インスタンスの具体的な型を識別します。これにより、さまざまなインターフェイスを実装するオブジェクトを含むコレクションのシームレスな逆シリアル化が可能になります。

以上がJSON.NET を使用してインターフェイス インスタンスのコレクションを逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。