ホームページ >バックエンド開発 >C++ >Json.Netで派生リストクラスをシリアル化するにはどうすればよいですか?

Json.Netで派生リストクラスをシリアル化するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-07 12:56:40466ブラウズ

How to Serialize Derived List Classes in Json.Net?

Json.Net での派生リスト クラスのシリアル化の課題を理解する

List から派生したクラスを操作する場合。 PagedResultクラスを使用すると、Json.Net シリアル化で問題が発生する可能性があります。デフォルトでは、Json.Net は IEnumerable を実装するクラスを配列として扱います。ただし、派生クラスを [JsonObject] 属性と [JsonProperty] 属性でマークすると、リスト自体は除き、派生クラスのメンバーのみがシリアル化されます。

ジレンマの克服: 2 つのアプローチ

これを解決するには、2 つのオプションがあります:

オプション1: リストをパブリック プロパティとして公開する

派生クラスでパブリック プロパティを作成して、リストを公開できます。たとえば、PagesResult では、プロパティ public List を追加できます。アイテム { 取得;セット; }。これにより、派生クラスのメンバーとリストの両方をシリアル化できます。

オプション 2: カスタム JsonConverter を使用する

または、カスタム JsonConverter を作成して処理することもできます。希望通りのシリアル化。 PagedResult のコンバーターの例を次に示します。

class PagedResultConverter<T> : JsonConverter
{
    // Override methods for writing and reading JSON
    // For brevity, only the `WriteJson` method is shown here
    
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        PagedResult<T> result = (PagedResult<T>)value;
        // Create a JSON object to represent the PagedResult
        // Add both derived class members and list items to the object
        // Write the object to the writer
    }
}

このコンバーターでは、シリアル化プロセスを完全に制御し、派生クラスのメンバーとリストの両方が JSON 出力に含まれるようにします。

デモと結論

これは、動作中のカスタム コンバーター:

// Assume a `PagedResult<string>` class definition
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new PagedResultConverter<string>());
string json = JsonConvert.SerializeObject(result, settings);

いずれかのアプローチを採用すると、派生クラスのメンバーとリストの両方を効果的にシリアル化し、Json.Net でのシリアル化要件を満たすことができます。

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

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