Json.Net : sérialiser les membres d'une classe dérivée de List
Json.Net traite par défaut les classes qui implémentent IEnumerable comme tableaux. Pour remplacer ce comportement, marquez la classe dérivée avec les attributs [JsonObject] et [JsonProperty]. Cependant, cela ne sérialise que les membres de la classe dérivée, pas la liste.
Pour sérialiser à la fois les membres de la classe dérivée et la liste, fournissez une propriété publique sur la classe dérivée pour exposer la liste :
class PagedResult<T> : List<T> { public IEnumerable<T> Items { get { return this; } } }
Vous pouvez également créer un JsonConverter personnalisé pour sérialiser le tout :
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; } }
Enregistrez le convertisseur dans le Paramètres JsonSerializer :
JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new PagedResultConverter<T>());
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!