Serialiser une propriété mais pas la deserialiser

cs_bunch Messages postés 2 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 18 novembre 2010 - 16 mars 2010 à 15:55
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 20 mars 2010 à 17:07
Bonjour,

la question est simple, lors de la sérialisation d'un objet, est-il possible d'inclure une propriété dans le fichier xml mais d'ignorer cette propriété lors de sa désérialisation.

exemple :

classe 1
{
private string prop1

public string Prop1
{
get{ return prop1;}
set{ prop1 = value;}
}
public string Prop2
{
get{ return prop1;}
}
}

serialisation :
<class1>
valeur1


valeur2


</class1>

deserialisation
- initilisation de la valeur de prop1 seulement, pas de tentative d'initialisation de prop2

Les propriétés en questions sont des champs calculés que je veux pouvoir sauvegarder pour analyse des données plus tard mais que je ne veux pas réintégrer dans l'appli lors de l'inportation de mon fichier.

info : je ne veux pas mettre de setter vide sur prop2

merci pour vos réponses

Bunch
PS : je ne savais pas trop comment classer le sujet, je suis désolé si je ne l'ai pas mis dans la bonne catégorie.

2 réponses

yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 8
20 mars 2010 à 16:34
je ne suis pas sure , mais lors de la deserialisation , l'object serialiser doit avoir un contructeur sans propriété ,
donc

public tonObject()
{
this.prop2 = null;
}

je pense que prop2 doit est intensuier a null apres deserialisation
a tester , c peut etre completement faux
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
20 mars 2010 à 17:07
Bonjour,

En fait là le truc est que le sérialiseur XML ne va pas persister la valeur retournée par Prop2 car elle est en lecture seule.

Je ne suis pas certains d'avoir tout compris à la question, mais pour faire cela je ne vois pas d'autre solution que la personnalisation de la sérialisation/desérialisation.

Petit exemple rapide (à stabiliser) :
    [Serializable]
    public class Classe1 : IXmlSerializable
    {
        public Classe1()
        {
        }

        private string prop1;
        private string prop3;

        public string Prop1
        {
            get { return prop1; }
            set { prop1 = value; }
        }

        public string Prop2
        {
            get { return prop1 + "..."; }
        }

        public string Prop3
        {
            get { return this.prop3; }
            set { this.prop3 = value; }
        }

        public XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(XmlReader reader)
        {
            reader.ReadToDescendant("Prop1");
            this.Prop1 = reader.ReadElementContentAsString();
            reader.ReadToNextSibling("Prop3");
            this.Prop3 = reader.ReadElementContentAsString();
        }

        public void WriteXml(XmlWriter writer)
        {
            writer.WriteElementString("Prop1", this.Prop1);
            writer.WriteElementString("Prop2", this.Prop2);
            writer.WriteElementString("Prop3", this.Prop3);
        }
    }




/*
coq
MVP Visual C#
CoqBlog
*/
0