Xml Serializer

Résolu
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 5 janv. 2005 à 11:42
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 8 janv. 2005 à 10:29
Bonjour,


Je sauve une collection d'object grâce à un XmlSerializer (je lis et j'écris).
Mais je n'ai pas trouvé de moyens pour ajouter des commentaires au sein de mon fichier xml avec cette méthode...


Est-ce possible? Ou bien la sérialization ne propose pas cette possibilité !?
Merci d'avance.

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
A voir également:

14 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 janv. 2005 à 16:44
Petit exemple rapide (à coup de StreamWriter/Reader, mais on doit pouvoir faire plus "propre") :


MaClasse classe = new MaClasse();
classe.FirstName = "FirstName";
classe.LastName = "LastName";
XmlSerializer serializer = new XmlSerializer(typeof(MaClasse));
MemoryStream memStream = new MemoryStream();

serializer.Serialize(memStream, classe);
memStream.Seek(0, SeekOrigin.Begin);

StreamReader sr = new StreamReader(memStream);
StreamWriter wr = new StreamWriter("monfichier.xml");

wr.WriteLine(sr.ReadLine()); // ajout 1ere ligne
wr.WriteLine("<!-- mon commentaite -->"); // commentaire
wr.Write(sr.ReadToEnd()); // restant

sr.Close();
wr.Close();
memStream.Close();

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 janv. 2005 à 11:46
Effectivement je ne crois pas que ce soit prevu.
Par contre tu as essayer d'éditer le fichier après sérialisation pour ajouter tes commentaires et voir si ça ne gène pas la désérialisation ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
5 janv. 2005 à 13:26
J'ai rajouté un commentaire manuellement, le deserializer n'as pas l'air de vouloir planter.
Je pense donc que ça marche!


Pour rajouter un commentaire après la ligne de déclaration (<?xml version="1.0" encoding="Windows-1252"?>) je fais comment? Je lit tout avec un XmlReader puis je réécris le tout avec mon commentaire en plus?
Ou y'a une meilleure solution ? (car mon fichier xml est assez grand...)

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 janv. 2005 à 13:50
Je ne vois pas vraiment d'autre solution lol

Cocoricoooooooo !!!!
coq
MVP Visual C#
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
6 janv. 2005 à 02:26
Je pense que ca doit etre possible d'apres Richard Clark dans Au coeur de VB.net (je recopie le bouquin donc c'est du VB, c'est du pareil au meme pour C#)

On peut affiner la serialization

<XmlRoot("MonParent", Namespace="http://toto")> _

Public class Parents

inherits Personne

<XmlElement("MonFils", Gettype(Personne))> Public Enfant as personne

<XmlIgnore()>Public Age As DateTime

End class



et une fois instancié puis serialisé ca nous donnait



<?xml etc... ?>



<monparent xmlns="http://toto" blabla>

<nom>John Clark</nom>

<datenaissance>DateTime</datenaissance>

<monfils>

<nom>Richard</nom>

<datenaissance>DateTime</datenaissance>

</monfils>

</monparent>



Tout ca pour te montrer qu'on peut personalizer la serialization grace aux attributs



Voici une liste des attributs que j'ai trouvé ici :
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/cpref/html/frlrfsystemattributeclasshierarchy.htm


[frlrfsystemxmlserializationxmlanyattributeattributeclasstopic.htm System.Xml.Serialization.XmlAnyAttributeAttribute]

[frlrfsystemxmlserializationxmlanyelementattributeclasstopic.htm System.Xml.Serialization.XmlAnyElementAttribute]

[frlrfsystemxmlserializationxmlarrayattributeclasstopic.htm System.Xml.Serialization.XmlArrayAttribute]

[frlrfsystemxmlserializationxmlarrayitemattributeclasstopic.htm System.Xml.Serialization.XmlArrayItemAttribute]

[frlrfsystemxmlserializationxmlattributeattributeclasstopic.htm System.Xml.Serialization.XmlAttributeAttribute]

[frlrfsystemxmlserializationxmlchoiceidentifierattributeclasstopic.htm System.Xml.Serialization.XmlChoiceIdentifierAttribute]

[frlrfsystemxmlserializationxmlelementattributeclasstopic.htm System.Xml.Serialization.XmlElementAttribute]

[frlrfsystemxmlserializationxmlenumattributeclasstopic.htm System.Xml.Serialization.XmlEnumAttribute]

[frlrfsystemxmlserializationxmlignoreattributeclasstopic.htm System.Xml.Serialization.XmlIgnoreAttribute]

[frlrfsystemxmlserializationxmlincludeattributeclasstopic.htm System.Xml.Serialization.XmlIncludeAttribute]

[frlrfsystemxmlserializationxmlnamespacedeclarationsattributeclasstopic.htm System.Xml.Serialization.XmlNamespaceDeclarationsAttribute]

[frlrfsystemxmlserializationxmlrootattributeclasstopic.htm System.Xml.Serialization.XmlRootAttribute]

[frlrfsystemxmlserializationxmltextattributeclasstopic.htm System.Xml.Serialization.XmlTextAttribute]

[frlrfsystemxmlserializationxmltypeattributeclasstopic.htm System.Xml.Serialization.XmlTypeAttribute]



Regarde sur le site de microsoft si tu n'as pas d'installé la msdn
library en local, dommage il n'y a pas de XmlCommentAttribute mais peut etre que le xmltext pourra t'aider tient nous au courant



<hr style="width: 100%; height: 2px;">Cyril
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
6 janv. 2005 à 02:35
Désolé pour les liens, c'est pas la bonne adresse, cliquer pas dessus


<hr style="width: 100%; height: 2px;">Cyril
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 janv. 2005 à 08:57
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 janv. 2005 à 09:35
Euh oui je connaissais ces attributs, mais moi je cherchais à insérer un comment dans mon xml, ceci dit il n'existe apparement pas d'attribut pemettant de spécifié qu'une property doit être traité comme un commentaire genre [XmlComment()]

Donc à part écrire "manuellement" après coup dans le fichier, je vois pas trop d'autres solutions....

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 janv. 2005 à 09:40
Si ton fichier n'est pas non plus énorme, sérialise dans un MemoryStream, et n'écrit sur le disque qu'après la modif.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 janv. 2005 à 09:13
J'ai essayé pendant je ne sais pas combien de temps avec ce MemoryStream, mais j'ai rien réussi à faire...

Je fais un truc du genre monSerializer.Serialize(monMemoryStream, monObject) et ensuite ? Je dois écrire mon commentaire xml la dedans, puis écrire le tout dans un file xml ou quoi?? j'ai pas très bien compris en fait...

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 janv. 2005 à 09:46
Ba tu t'en sert comme d'un fichier, à la seule différence qu'il n'est pas sur le disque, ce qui est transparent vu de ton côté, donc comme tu parlais de lire le xml produit et le réecrire en rajoutant le comment : ça tombe bien bcp de classes acceptent des Stream en entrée :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 janv. 2005 à 14:08
Je sais pas pourquoi y'a un truc que j'arrive pas à faire, pourtant ça doit pas être trop compliqué.
Supposons que j'aie fait toutes les modifications que je voulais au sein de mon MemoryStream (c'est à dire que j'y ai rajouté mon commentaire manuellement), comment je fais pour l'écrire dans mon fichier xml? (le déserializer doit encore pouvoir le lire...)

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 janv. 2005 à 10:26
C'est bien ce que je pensais : Je viens de battre un nouveau record, celui du rendement le plus faible : 10 lignes en 3 jours, et en plus c'est même pas moi qui les ai trouvées ! (pourtant, j'aurais du trouver ça moi-même, à moins que je sois bien plus nul que ce que je pense )

Quelle honte
lol.

En tout cas merci pour tout !

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 janv. 2005 à 10:29
lol
de rien

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Rejoignez-nous