Maison > développement back-end > C++ > Comment puis-je sérialiser les champs privés et de sous-classe dans JSON.Net ?

Comment puis-je sérialiser les champs privés et de sous-classe dans JSON.Net ?

Barbara Streisand
Libérer: 2025-01-07 20:25:39
original
270 Les gens l'ont consulté

How Can I Serialize Private and Subclass Fields in JSON.Net?

JSON.Net : sérialisation des champs privés et hérités

Ce guide montre comment sérialiser des objets complexes à l'aide de JSON.Net, y compris les champs privés et ceux hérités des sous-classes. La sérialisation convertit les objets dans un format stockable ou transmissible. Pour les objets avec des membres privés ou un héritage complexe, JSON.Net nécessite une gestion personnalisée.

Le défi :

Vous disposez d'une hiérarchie de classes avec des champs d'accessibilité variable (public, privé, protégé, etc.). Vous devez sérialiser tous les champs, même les champs privés et ceux des sous-classes, par exemple pour la sauvegarde des données.

La solution :

Un résolveur de contrat personnalisé permet de remplacer le comportement de sérialisation par défaut de JSON.Net. Ce résolveur forcera l'inclusion de tous les champs, quels que soient leurs modificateurs d'accès.

Implémentation JSON.Net :

<code class="language-csharp">var settings = new JsonSerializerSettings { ContractResolver = new MyContractResolver() };
var json = JsonConvert.SerializeObject(myObject, settings);</code>
Copier après la connexion

Résolveur de contrat personnalisé (MyContractResolver) :

<code class="language-csharp">public class MyContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        var props = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                        .Select(p => base.CreateProperty(p, memberSerialization))
                        .Union(type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                                   .Select(f => base.CreateProperty(f, memberSerialization)))
                        .ToList();
        props.ForEach(p => { p.Writable = true; p.Readable = true; });
        return props;
    }
}</code>
Copier après la connexion

Ce résolveur examine tous les champs d'instance et propriétés (publiques et privées) du type donné et ses classes de base. Il marque ensuite chaque propriété comme étant à la fois lisible et inscriptible, garantissant une sérialisation complète. Notez que l'utilisation de cette approche pour sérialiser les champs privés doit être effectuée avec prudence, en particulier pour les données sensibles en matière de sécurité.

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