2011-12-27 16 views
6

Estoy intentando escribir una respuesta XML para mi servicio web, pero no puedo encontrar la forma de hacer que la declaración aparezca en la respuesta.Cómo incluir la declaración con XElement.ToString()

Mi código es así:

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; 

respuesta es sólo un POCO para el almacenamiento de datos de respuesta.

Soy consciente de que el método Save incluye la declaración y el método ToString() no. Necesito escribir mi declaración nuevamente con ToString().

Realmente solo quiero devolver un XML personalizado de mi servicio REST sin enviar mi cadena 100 veces para devolver XML válido. ¿Es esto posible o estoy haciendo girar mis ruedas?

+2

¿Por qué no utilizar una clase que a continuación, serializar a XML? – Maess

+0

Podría usar este enfoque pero me encuentro con el mismo problema por diferentes razones. – BentOnCoding

+0

¿Por qué devuelve un 'XElement' y no un' XDocument' si desea la declaración XML? – Jacob

Respuesta

0

Si desea incluir la declaración XML, puede hacerlo de esta manera:

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

Actualización: me he dado cuenta, que perece StringWriter codificación. Así que una opción más es hacerlo:

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