[OperationContract] [WebGet] 메서드를 정의하여 HTML에 문자열을 저장하지 않고 문자열에 저장된 XML을 반환하려면 어떻게해야합니까?WCF의 [WebGet] 메서드에 대한 노출 된 XML을 내보내는 방법?
응용 프로그램은 WCF 서비스를 사용하여 문자열로 저장된 XML/XHTML 콘텐츠를 반환합니다. XML은 [DataContract]를 통해 특정 클래스에 해당하지 않습니다. XSLT에서 사용하기위한 것입니다.
[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
}
그러나 때 직렬화, 루트 태그 랩 주어진 내용이 :
[OperationContract]
[WebGet]
public XmlContent GetContent()
{
return new XmlContent("<p>given content</p>");
}
나는이 클래스를 가지고있다.
<XmlContent>
<p>given content</p>
</XmlContent>
나는 루트 태그 ([XmlRoot (ElementName을 = "DIV")])의 이름을 변경하는 방법을 알고,하지만 난 가능하다면, 루트 태그를 생략 할 필요가있다.
IXmlSerializable 대신 [DataContract]를 시도했지만 유연성이 떨어집니다.
감사합니다. 그게 작동하지만 XML을 비 직렬화 한 다음 다시 직렬화하는 단점이 있습니다. 내가 원하는만큼 효율적이지는 않지만 적어도 루트 태그는 제거됩니다. 대안을 가져 주셔서 감사합니다. –
그래, 원본 데이터가 문자열로 저장되어 있다면 다중 단계 프로세스를 거쳐야한다고 생각합니다. 정적 문자열 일 경우 한 번만 수행 한 다음 결과를 캐시 할 수 있습니다. 최종 문서 조각을 채우는 템플릿이라고 가정하면 템플릿을 캐시하고 각 요청에 따라 동적 비트를 채울 수 있습니다. – Cheeso
이 예제를 모노 2.10.8.1 throws와 함께 사용 - 예외 유형 'System.Xml.XmlElement'에 DataContract 특성 이름을 null 또는 빈 문자열로 설정할 수 없습니다. – Tom