[OperationContract] [WebGet]メソッドを定義して、文字列に格納されたXMLを返すことができます。WCFの[WebGet]メソッドのための裸のXMLを放出するには?
アプリケーションは、文字列として格納されているXML/XHTMLコンテンツを返すためにWCFサービスを使用しています。 XMLは、[DataContract]を介して特定のクラスに対応していません。これは、XSLTによって消費されることを意味します。
[OperationContract]
[WebGet]
public XmlContent GetContent()
{
return new XmlContent("<p>given content</p>");
}
私はこのクラスを持っている:
[XmlRoot]
public class XmlContent : IXmlSerializable
{
public XmlContent(string content)
{
this.Content = content;
}
public string Content { get; set; }
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
throw new NotImplementedException();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteRaw(this.Content);
}
#endregion
}
しかしときシリアライズされ、ラップ与えられたコンテンツルートタグがあります。
<XmlContent>
<p>given content</p>
</XmlContent>
私は、ルートタグ([XMLRootは(elementNameが=「DIV」)])の名前を変更する方法を知っているが、私はすべての可能性であれば、ルートタグを省略する必要があります。
IXmlSerializableの代わりに[DataContract]を試しましたが、柔軟性が低いようです。
ありがとうございます!それはうまくいくが、XMLをデシリアライズしてからそれを再直列化することの欠点がある。私が望むほど効率的ではありませんが、少なくともルートタグは削除されています。代替のおかげで。 –
元のデータが文字列として格納されている場合は、その複数ステップのプロセスを経なければならないと思います。静的な文字列の場合は、一度だけデセルしてから結果をキャッシュすることができます。最終的なドキュメントの断片を埋めるためのテンプレートであると仮定すると、テンプレートをキャッシュし、各要求ごとに動的ビットを埋め込むことができます。 – Cheeso
この例をモノ2.10.8.1スローで使用する例外タイプ 'System.Xml.XmlElement'に、DataContract属性の名前をnullまたは空の文字列に設定することはできません。 – Tom