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
908 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!

source:php.cn
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