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);