2011-12-27 16 views
6

Próbuję napisać odpowiedź XML dla mojego serwisu internetowego, ale nie mogę wymyślić, jak uczynić deklarację widoczną w odpowiedzi.Jak dołączyć deklarację do XElement.ToString()

Mój kod to tak:

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; 

Response to tylko poco do przechowywania danych odpowiedzi.

Mam świadomość, że metoda Save zawiera deklarację, a metoda nie. Muszę napisać oświadczenie z powrotem pod numerem ToString().

Naprawdę chcę po prostu zwrócić niestandardowy kod XML z mojej usługi REST bez przesyłania 100-krotnego ciągu znaków w celu zwrócenia poprawnego kodu XML. Czy to możliwe, czy tylko obracam kółka?

+2

Dlaczego nie użyć klasy, którą następnie serializować do XML? – Maess

+0

Mogę użyć tego podejścia, ale mam taki sam problem z różnych powodów. – BentOnCoding

+0

Dlaczego zwracasz 'XElement', a nie' XDocument', jeśli chcesz deklarację XML? – Jacob

Odpowiedz

0

Jeśli chcesz dołączyć deklarację XML, można zrobić to w ten sposób:

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

UPDATE: Zauważyłem, że kodowanie psuje StringWriter. Więc jeszcze jedna opcja to:

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