[C#]Serialization classe abstraite

Bonjour,

j’ai un souci de serialisation. Je vous explique avec du code ce sera plus simple B)

j’ai une classe abstraite qui implemente une interface :

[code][Serializable]
public abstract class ME : IM
{
protected string m_name;
protected string m_body;

	public ME() { }

	public abstract string Body {get;}


	public string Name
	{
		get { return m_name; }
	}

}[/code]
une autre classe qui derive de la classe abstraite :

[code]
[Serializable]
public class MH : ME
{
string m_bodyH;

	public MessageHtml() { }
	public MessageHtml(string name, string bodyH)
	{
		m_name = name;
		m_bodyH = bodyH;		
	}

	public override string Body
	{
		get { return m_bodyH; }
	}
}[/code]

Enfin je serialise mon objet de la manière suivante :

[code]ME myObject = new MH(“le nom”, “le bodyH”);

System.IO.StringWriter oWriter = new System.IO.StringWriter();
XmlSerializer serializer = new XmlSerializer(myObject.GetType());
serializer.Serialize(oWriter, myObject);
lblName.Text = oWriter.ToString();[/code]

Tout compile trés bien. Mais le souci est que je n’arrive pas à obtenir les attributs de la classe abstraite “ME”. Je n’ai rien dans le “oWriter” (à part les balises xml).

Je debute un peu dans la serialisation et je ne comprend pas pourquoi je n’arrive pas à les obtenir.
Merci pour votre aide B)

Donc j’ai trouvé ! B)
Il faut ajouter la methode SET dans chaque propriété qu’on désire sérialisé.

cad dans la classe abstraite :

[code][Serializable]
public abstract class ME : IM
{
protected string m_name;
protected string m_body;

	public ME() { }

	public abstract string Body {get;}


	public string Name
	{
		get { return m_name; }
		set { m_name = value; }
	}

}[/code]

merci quand meme B)

Sauf que parfois, le set, on ne souhaite pas qu’il soit disponible.

La solution dans ce cas c’est de créer un private set { … }.

La serialisation utilise les méthodes par réflection, elle n’a donc rien à battre de la visibilité des accesseurs.

Ben disons que j’aimerai bien mais si je mets private devant set, j’obtiens l’erreur suivante lors de la sérialisation :

Et avec protected c’est la meme chose B)

Ouned. Il ne te reste plus qu’à gérer la sérialisation à la mano. B)