如何定义[OperationContract] [WebGet]方法来返回存储在字符串中的
XML,而不使用HTML编码字符串?
该应用程序正在使用WCF服务返回已存储为字符串的XML / XHTML内容. 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”)]),但是如果可能,我需要省略根标记.
我也尝试过[DataContract]而不是IXmlSerializable,但似乎不那么灵活.
返回一个XmlElement.你不需要IXmlSerializable.你不需要一个包装类.
示例服务接口:
namespace Cheeso.Samples.Webservices._2009Jun01 { [ServiceContract(Namespace="urn:Cheeso.Samples.Webservices" )] public interface IWebGetService { [OperationContract] [WebGet( BodyStyle = WebMessageBodyStyle.Bare,RequestFormat = WebMessageFormat.Xml,ResponseFormat = WebMessageFormat.Xml,UriTemplate = "/Greet/{greeting}")] XmlElement Greet(String greeting); } }
服务实施:
namespace Cheeso.Samples.Webservices._2009Jun01 { [ServiceBehavior(Name="WcfWebGetService",Namespace="urn:Cheeso.Samples.WebServices",IncludeExceptionDetailInFaults=true)] public class WcfWebGetService : IWebGetService { public XmlElement Greet (String greeting) { string rawXml = "<p>Stuff here</p>"; XmlDocument doc = new XmlDocument(); doc.Load(new System.IO.StringReader(rawXml)); return doc.DocumentElement; } } }
另见这个类似的问题,但是没有WebGet的扭曲:
serializing-generic-xml-data-across-wcf-web-service-requests.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。