2011-12-27 17 views
6

Tôi đang cố gắng viết một phản ứng XML cho dịch vụ web của tôi tuy nhiên tôi không thể tìm ra cách làm cho tuyên bố xuất hiện trong phản hồi.Làm thế nào để bao gồm Tuyên bố với XElement.ToString()

Mã của tôi là như vậy:

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; 

đáp ứng chỉ là một POCO để lưu trữ dữ liệu đáp ứng.

Tôi biết rằng phương pháp Save bao gồm khai báo và phương thức ToString() thì không. Tôi cần viết lại tờ khai của mình với ToString().

Tôi thực sự chỉ muốn trả lại XML tùy chỉnh từ Dịch vụ REST của mình mà không cần phải gửi chuỗi của tôi 100 lần để trả lại XML hợp lệ. Điều này thậm chí có thể hay chỉ là quay bánh xe của tôi?

+2

Tại sao không sử dụng một lớp học mà bạn sau đó tuần tự hóa thành XML? – Maess

+0

Tôi có thể sử dụng cách tiếp cận này nhưng tôi chạy vào cùng một vấn đề vì các lý do khác nhau. – BentOnCoding

+0

Tại sao bạn trả về 'XElement' và không phải' XDocument' nếu bạn muốn khai báo XML? – Jacob

Trả lời

0

Nếu bạn muốn bao gồm khai xml, bạn có thể làm theo cách này:

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

Cập nhật: tôi đã nhận thấy, đó là chiến lợi phẩm StringWriter mã hóa. Vì vậy, một tùy chọn khác là làm như vậy:

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