Maison >développement back-end >C++ >Comment puis-je sérialiser des objets avec des membres privés en C# ?

Comment puis-je sérialiser des objets avec des membres privés en C# ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-27 15:46:26699parcourir

How Can I Serialize Objects with Private Members in C#?

Sérialisation d'objets avec des membres privés

Lorsqu'ils tentent de sérialiser un objet avec des propriétés privées, les développeurs peuvent rencontrer des difficultés avec le XMLSerializer par défaut, car il nécessite un accès public à toutes les propriétés sérialisées. Ce problème est démontré dans la question, où un objet avec une propriété Id privée ne peut pas être sérialisé en raison de sa nature en lecture seule.

Résoudre le problème

Pour sérialiser des objets avec membres privés, le DataContractSerializer peut être utilisé. Contrairement à XMLSerializer, il ne nécessite pas d'accès public et s'appuie plutôt sur des contrats de données créés à l'aide d'attributs. Voici un exemple d'utilisation de DataContractSerializer :

[DataContract]
class MyObject {
    public MyObject(Guid id) { this.id = id; }
    [DataMember(Name="Id")]
    private Guid id;
    public Guid Id { get {return id;}}
}

En ajoutant l'attribut DataContract à la classe et l'attribut DataMember à la propriété privée Id, nous pouvons demander au DataContractSerializer de gérer sa sérialisation.

var ser = new DataContractSerializer(typeof(MyObject));
            var obj = new MyObject(Guid.NewGuid());
            using(XmlWriter xw = XmlWriter.Create(Console.Out)) {
                ser.WriteObject(xw, obj);
            }

Cette approche permet la sérialisation d'objets avec des propriétés privées sans compromettre leur encapsulation. Il est important de noter que DataContractSerializer ne prend pas en charge XmlAttributes, privilégiant plutôt XmlElements.

Alternativement, pour un contrôle plus granulaire sur le processus de sérialisation, envisagez d'implémenter l'interface IXmlSerializing. En fournissant des méthodes de sérialisation et de désérialisation XML personnalisées, une plus grande flexibilité peut être obtenue avec XMLSerializer.

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:
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