ホームページ > バックエンド開発 > C++ > 「$type」フィールドを使用せずにJson.Netで多態的な子オブジェクトをシリアル化する方法は?

「$type」フィールドを使用せずにJson.Netで多態的な子オブジェクトをシリアル化する方法は?

Barbara Streisand
リリース: 2025-01-24 12:57:14
オリジナル
764 人が閲覧しました

How to Serialize Polymorphic Child Objects in Json.Net without the

json.net polymorphic sub -object serialization、 "$ type" field

オブジェクトシリアル化にjson.netを使用したシリアル化のシナリオでは、親クラスのポリマーオブジェクトを示す一般的な需要があります。 json.netのtypeNameHandling.autoの設定がこのタスクを簡素化しますが、サブオブジェクトのタイプを示すために「$タイプ」フィールドを導入します。さまざまな理由で、これは望ましくないかもしれません。

チャレンジ

課題は、「$タイプ」フィールドに依存せずにサブオブジェクトのタイプを識別する方法です。 1つの方法は、提供された例コードに示すように、親クラスのインジケーターとしてタイプ情報を保存することです。ただし、これにより、アクセシビリティとデータ管理に関連する制限がもたらされます。

solution

これらの制限を解決するために、より効果的な解決策は、サブタイプの情報を基本クラスの属性として直接追加することです。これにより、シリアル化がベースクラスに割り当てられると、シリアル化されたサブタイプの列挙が可能になります。 Deeperyの期間中に、カスタムJSONConverterを使用してJSONデータを一時オブジェクトにロードし、「タイプ」属性に基づいて適切なサブクラスを決定し、それに応じてカウンターシリアル化を実行できます。 詳細を実装してください

カスタムサブタイプの列挙の作成と、タイプをサブタイプにマッピングする辞書の実現。 SubtypeClassbaseベースクラスには、辞書を使用してサブタイプに戻る型属性が含まれています。

subtypeclasssconverterクラスは、デリバティブの原因となるjsonconverterとして機能します。 JSONオブジェクトの「タイプ」プロパティをチェックし、対応するサブタイプを取得し、既存または新しいインスタンスの対応するサブクラスを埋めます。 この方法を採用することにより、json.netシリアル化と派生化された多型サブオブジェクトを使用して、データ表現の柔軟性と制御可能性を確保することなく、「$タイプ」フィールドを導入できます。

以上が「$type」フィールドを使用せずにJson.Netで多態的な子オブジェクトをシリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート