ホームページ > バックエンド開発 > C++ > json.netの「$型」フィールドなしで、多型の子オブジェクトをシリアル化して脱直するにはどうすればよいですか?

json.netの「$型」フィールドなしで、多型の子オブジェクトをシリアル化して脱直するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-24 13:07:08
オリジナル
659 人が閲覧しました

How Can I Serialize and Deserialize Polymorphic Child Objects in JSON.NET Without a

json.netシリアル化と砂漠化を備えた多型サブオブジェクトを使用したデータ型

JSON.NETは、JSONとC#クラスの間のシリアル化と派生化を許可しますが、多型オブジェクトを処理すると複雑になる場合があります。

$タイプフィールドを使用

デフォルトのメソッドは、

を使用してフィールドをJSONに追加することです。ただし、これにより不必要なフィールドが導入されます。 TypeNameHandling.Auto $type代替サブタイプの治療方法

フィールドを回避するために、代替方法は、多型オブジェクトのベースクラスを作成し、

属性を追加してサブタイプを示すことです。ただし、これには、シリアル化中に

属性にアクセスするために、コンテナクラスがサブオブジェクトインスタンスを含める必要があります。 $type Type基本クラスのサブタイプの属性Type

より安定した方法は、基本クラスへの属性としてサブタイプの情報を追加することです。これは、カスタムを使用して行われます。

カスタムサブタイプコンバーター

JsonConverterカスタムコンバーターは、Typeメソッドを使用して、JSONの「タイプ」プロパティと、それに応じてシリアル化されたオブジェクトを確認します。また、処理できるタイプを指定するメソッドも定義します。

コード実装

次のプロトタイプの実装では、この方法が説明されています

ReadJson この交換方法を通じて、サブタイプの情報は、個別のCanConvertフィールドなしでJSON自体に組み込まれ、シリアル化されたポリマーオブジェクトに柔軟なソリューションを提供します。

この改訂された出力は、「デフォルトのアプローチ」のような不必要なフレーズを避けています>カスタムコンバーターのアクティビティインポーテーションを備えたセクション

以上がjson.netの「$型」フィールドなしで、多型の子オブジェクトをシリアル化して脱直するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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