ホームページ > バックエンド開発 > C++ > カスタムプロパティとリスト項目の両方を保持しながら、Json.Netのリストから派生したクラスをシリアル化する方法は?

カスタムプロパティとリスト項目の両方を保持しながら、Json.Netのリストから派生したクラスをシリアル化する方法は?

Linda Hamilton
リリース: 2025-01-07 13:17:41
オリジナル
864 人が閲覧しました

How to Serialize a Class Derived from List in Json.Net while Preserving Both Custom Properties and List Items?

Json.Net: List から派生したクラスのメンバーをシリアル化する

Json.Net は、デフォルトで IEnumerable を実装するクラスを次のように扱います。配列。この動作をオーバーライドするには、派生クラスを [JsonObject] 属性と [JsonProperty] 属性でマークします。ただし、これはリストではなく、派生クラスのメンバーのみをシリアル化します。

派生クラスのメンバーとリストの両方をシリアル化するには、派生クラスにパブリック プロパティを指定してリストを公開します。

class PagedResult<T> : List<T>
{
    public IEnumerable<T> Items { get { return this; } }
}
ログイン後にコピー

または、カスタム JsonConverter を作成して全体をシリアル化します。

class PagedResultConverter<T> : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(PagedResult<T>));
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        PagedResult<T> result = (PagedResult<T>)value;
        JObject jo = new JObject();
        jo.Add("Properties", JObject.FromObject(result, serializer));
        jo.Add("Items", JArray.FromObject(result.ToArray(), serializer));
        jo.WriteTo(writer);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JObject jo = JObject.Load(reader);
        PagedResult<T> result = new PagedResult<T>();
        jo["Properties"].ToObject<PagedResult<T>>(serializer);
        result.AddRange(jo["Items"].ToObject<T[]>(serializer));
        return result;
    }
}
ログイン後にコピー

コンバーターをJsonSerializerSettings:

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

以上がカスタムプロパティとリスト項目の両方を保持しながら、Json.Netのリストから派生したクラスをシリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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