ホームページ > バックエンド開発 > C++ > Json.NET を使用してリストと派生クラス メンバーの両方をシリアル化するにはどうすればよいですか?

Json.NET を使用してリストと派生クラス メンバーの両方をシリアル化するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-07 13:01:41
オリジナル
851 人が閲覧しました

How Can I Serialize Both a List and Derived Class Members Using Json.NET?

派生リスト クラスの Json.NET シリアル化のカスタマイズ

概要

クラスを拡張する場合List から派生したものであるため、リストのシリアル化と両方を処理するのは難しい場合があります。および派生クラスの追加メンバー。デフォルトでは、Json.Net は IEnumerable 実装を配列として扱い、逆シリアル化するときにリストのみをシリアル化します。

リストと派生クラス メンバーの両方をシリアル化するアプローチ

主に 2 つあります。この問題に対処するアプローチ:

Public Property Exposure

1 つのオプションは、リストを公開するパブリック プロパティを派生クラスに作成することです。これにより、Json.Net はプロパティを認識し、プロパティと派生クラス メンバーの両方をシリアル化します。ただし、リストが内部的にのみアクセスできるようにする必要がある場合、このアプローチでは不必要な複雑さが生じる可能性があります。

カスタム JsonConverter

代わりに、カスタム JsonConverter を実装してシリアル化プロセスを制御することもできます。 。これにより、必要なシリアル化動作をより柔軟に定義できるようになります。 PagedResult のコンバーターの例を次に示します。

public class PagedResultConverter<T> : JsonConverter
{
    // ... Implementation ...
}
ログイン後にコピー

コンバーター内では、リストと派生クラス メンバーのシリアル化と逆シリアル化を個別に制御できます。

カスタム JsonConverter の使用法

カスタム コンバーターを使用するには、 JsonSerializerSettings に含める必要があります:

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new PagedResultConverter<string>());
settings.Formatting = Formatting.Indented;
ログイン後にコピー

カスタム コンバーターを使用した出力例

カスタム コンバーターを使用すると、PagesResult をシリアル化するときに次の JSON 出力が生成されます< ;T>:

{
  "PageSize": 10,
  "PageIndex": 0,
  "TotalItems": 3,
  "TotalPages": 1,
  "Items": [
    "foo",
    "bar",
    "baz"
  ]
}
ログイン後にコピー

このアプローチにより、シリアル化プロセスを実行し、リストと派生クラス メンバーの両方を効果的にシリアル化する問題を解決します。

以上がJson.NET を使用してリストと派生クラス メンバーの両方をシリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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