2011-12-27 5 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()と私の宣言を書き戻す必要があります。

実際には、有効なXMLを返すために文字列を100回キャストせずに、自分のRESTサービスからカスタムXMLを返すだけです。これは可能なのですか、ただ私の車輪を回転させていますか?

+2

XMLにシリアライズするクラスを使用しないのはなぜですか? – Maess

+0

私はこのアプローチを使うことができましたが、同じ理由で別の理由で実行されます。 – BentOnCoding

+0

なぜXML宣言が必要なのか、 'XElement'を返すのではなく、' XDocument'を返すのですか? – Jacob

答えて

0

あなたはXML宣言を含める場合、あなたはこのようにそれを行うことができます。

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

アップデート: 私は、それにStringWriterの戦利品エンコーディングを気づきました。もう1つの選択肢は、これを行うことです。

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