Maison > développement back-end > C++ > Comment sérialiser une classe dérivée d'une liste dans Json.Net tout en préservant à la fois les propriétés personnalisées et les éléments de liste ?

Comment sérialiser une classe dérivée d'une liste dans Json.Net tout en préservant à la fois les propriétés personnalisées et les éléments de liste ?

Linda Hamilton
Libérer: 2025-01-07 13:17:41
original
923 Les gens l'ont consulté

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

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; } }
}
Copier après la connexion

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;
    }
}
Copier après la connexion

Enregistrez le convertisseur dans le Paramètres JsonSerializer :

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new PagedResultConverter<T>());
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal