2011-10-09 4 views
4

Je souhaite sérialiser un objet XDocument. J'ai écrit ce code.Comment peut-on sérialiser un objet XDocument?

 XDocument signup_xml_file = new XDocument(
      new XDeclaration("1.0", "utf-8", "yes"), 
      new XComment("signup_xml_file"), 
      new XElement("Student", 
       new XElement("univ_id", univ_id), 
       new XElement("personal_id",personal_id), 
       new XElement("user_name", user_name))); 
     client.Connect(host_name, port); 
     //connect to the server . 
     bf.Serialize(client.GetStream(), signup_xml_file); // serialize the signup_xml_file 

je reçois l'exception suivante lors d'une tentative de sérialisation du XDocument. Y at-il un moyen de rendre la classe XDocument sérialisable, ou est-il un autre moyen d'envoyer mon XDocument?

Type 'System.Xml.Linq.XDocument' à l'Assemblée 'System.Xml.Linq, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' est pas marqué comme sérialisable.

Répondre

8

XLes documents ne sont pas destinés à être sérialisés. D'une certaine manière, ils sont eux-mêmes des sérialiseurs.

Mais vous pouvez simplement les écrire: signup_xml_file.Save(client.GetStream());
qui élimine également le surdébit de sérialisation.

Edit:

Et de l'autre côté vous aurez besoin

var doc = XDocument.Load(someStream); 
+0

le problème dans l'enregistrement du fichier xml: 1- le client doivent enregistrer le fichier xml dans son harddisck 2- lorsque le serveur recieved le fichier, il doit sauver il dans le serveur dick puis charger le fichier à partir du Xdocument.load ("chemin") 3- supprimer le fichier du serveur – user983195

+2

Non, l'autre côté peut tout aussi facilement le charger à partir du Stream. Voir Modifier. Il n'y aura pas besoin d'un fichier où le Serializer n'en a pas besoin. –

1

Je ne vois aucune raison pour laquelle vous voudriez sérialiser l'objet XDocument. Juste sérialiser la chaîne XML que vous pouvez obtenir en appelant ToString() sur le document.

Et je ne vois aucune raison d'utiliser la sérialisation binaire ici. Si vous n'en avez pas besoin, vous pouvez simplement écrire la chaîne XML dans la sortie.

+0

Je veux envoyer les données dans un document XML au serveur, donc je dois sérialiser pour envoyer? où est le mauvais ?? – user983195

+1

pouvez-vous expliquer plus ce que vous voulez dire? – user983195

+0

Vous ne voulez pas envoyer l'objet 'XDocument', sérialisé à l'aide de la sérialisation binaire. Vous voulez envoyer le document XML réel, sous forme de chaîne. Pour ce faire, vous devez obtenir la chaîne à partir de 'XDocument'. – svick

2

Si vous voulez plus de contrôle sur la sérialisation de XDocument, utilisez la fonction WriteTo et créez votre propre XmlWriter.

Voici un exemple:

using (new XmlTextWriter(stream, Encoding.UTF8) { Formatting = Formatting }) 
    _document.WriteTo(xmlTextWriter); 
Questions connexes