Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mensiri Kelas yang Diperolehi daripada Senarai dalam Json.Net sambil Memelihara Kedua-dua Sifat Tersuai dan Item Senarai?

Bagaimana untuk Mensiri Kelas yang Diperolehi daripada Senarai dalam Json.Net sambil Memelihara Kedua-dua Sifat Tersuai dan Item Senarai?

Linda Hamilton
Lepaskan: 2025-01-07 13:17:41
asal
872 orang telah melayarinya

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

Json.Net: Mensiri Ahli Kelas Diperoleh daripada Senarai

Json.Net secara lalai memperlakukan kelas yang melaksanakan IEnumerable sebagai tatasusunan. Untuk mengatasi tingkah laku ini, tandakan kelas terbitan dengan atribut [JsonObject] dan [JsonProperty]. Walau bagaimanapun, ini hanya mensiri ahli kelas terbitan, bukan senarai.

Untuk mensiri kedua-dua ahli kelas terbitan dan senarai, sediakan harta awam pada kelas terbitan untuk mendedahkan senarai:

class PagedResult<T> : List<T>
{
    public IEnumerable<T> Items { get { return this; } }
}
Salin selepas log masuk

Sebagai alternatif, buat JsonConverter tersuai untuk mensirikan semuanya:

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;
    }
}
Salin selepas log masuk

Daftarkan penukar dalam JsonSerializerSettings:

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new PagedResultConverter<T>());
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mensiri Kelas yang Diperolehi daripada Senarai dalam Json.Net sambil Memelihara Kedua-dua Sifat Tersuai dan Item Senarai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan