Xml Serializer [Résolu]

Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- - Dernière réponse : cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
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
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
3
Merci
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#

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 99 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
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#
Commenter la réponse de cs_coq
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
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
Commenter la réponse de cs_Bidou
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
Je ne vois pas vraiment d'autre solution lol

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
0
Merci
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
Commenter la réponse de jesusonline
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
0
Merci
Désolé pour les liens, c'est pas la bonne adresse, cliquer pas dessus


<hr style="width: 100%; height: 2px;">Cyril
Commenter la réponse de jesusonline
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
Commenter la réponse de cs_coq
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
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
Commenter la réponse de cs_Bidou
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
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#
Commenter la réponse de cs_coq
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
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
Commenter la réponse de cs_Bidou
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
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#
Commenter la réponse de cs_coq
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
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
Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
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
Commenter la réponse de cs_Bidou
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
lol
de rien

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.