2011-12-27 96 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();