2011-12-27 67 views
6

我正在嘗試爲我的Web服務編寫XML響應,但我無法弄清楚如何使聲明出現在響應中。如何使用XElement.ToString()包含聲明

我的代碼是像這樣:

StringBuilder sBuilder = new StringBuilder(); 
using (XmlWriter writer = XmlWriter.Create(sBuilder)) 
{ 
    writer.WriteStartDocument(); 
    writer.WriteStartElement("ReportResponse"); 
    Response.WriteXml(writer); 
    writer.WriteEndElement(); 
    writer.WriteEndDocument(); 
} 

var response = XElement.Parse(sBuilder.ToString()); 
return response; 

響應僅僅是一個POCO用於存儲響應數據。

我知道,Save方法包括聲明和ToString()方法沒有。我需要用ToString()寫回我的聲明。

我真的只想從我的REST服務中返回自定義XML,而無需強制轉換我的字符串100次以返回有效的XML。這是甚至可能或只是旋轉我的車輪?

+2

爲什麼不使用類,你再序列化到XML? – Maess 2011-12-27 19:48:57

+0

我可以使用這種方法,但由於不同的原因我遇到了同樣的問題。 – BentOnCoding 2011-12-27 19:56:44

+0

如果你想要XML聲明,你爲什麼要返回'XElement'而不是'XDocument'? – Jacob 2011-12-27 20:05:01

回答

0

如果要包括XML聲明,你可以這樣來做:

XDocument xdoc = XDocument.Parse(xmlString); 
StringBuilder builder = new StringBuilder(); 
using (TextWriter writer = new StringWriter(builder)) 
{ 
    xdoc.Save(writer); 
} 
Console.WriteLine(builder); 

更新: 我注意到,該StringWriter的戰利品編碼。因此,多一個選擇是這樣做的:

string docWithDeclaration = xdoc.Declaration + xdoc.ToString();