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?
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; } } }
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; } }
Daftarkan penukar dalam JsonSerializerSettings:
JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new PagedResultConverter<T>());
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!