2011-10-09 55 views
4

我想序列化一个XDocument对象。我写了这段代码。如何序列化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 

尝试序列化XDocument时,出现以下异常。有没有办法使XDocument类可序列化,或者有另一种方法发送我的XDocument

类型 'System.Xml.Linq.XDocument' 在大会 'System.Xml.Linq的,版本= 4.0.0.0,文化=中性公钥= b77a5c561934e089' 未标记为可序列。

回答

8

XDocuments不打算序列化。在某种程度上,它们是序列化程序本身。

但你可以简单地写下它们:signup_xml_file.Save(client.GetStream());
这也消除了串行器的开销。

编辑:

而另一边则需要

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

在保存XML文件中的问题,即: 1 - 客户端必须保存在XML文件中是harddisck 2 - 当服务器收到它来保存文件它在服务器迪克然后加载文件从Xdocument.load(“路径”) 3-从服务器上删除该文件 – user983195

+2

不,另一方可以很容易地从流加载它。请参阅编辑。不需要序列化程序不需要文件的文件。 –

1

我看不出有任何理由,你为什么会想序列化XDocument对象。通过在文档上调用ToString(),可以序列化您可以获得的XML字符串。

而我看不出任何理由在这里使用二进制序列化。如果你实际上不需要它,你可以将XML字符串写入输出。

+0

我想发送一个XML文件中的数据到服务器,所以我必须序列化它发送?错在哪里? – user983195

+1

你能解释一下你的意思吗? – user983195

+0

您不想发送使用二进制序列化序列化的'XDocument'对象。您希望以字符串形式发送实际的XML文档。要做到这一点,你必须从'XDocument'中获取字符串。 – svick

2

如果您想更多地控制XDocument的序列化,请使用WriteTo函数并创建您自己的XmlWriter

下面是一个例子:

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