我有一个用C#编写的REST服务,可以读入参数并返回一些值,但XML中没有足够的级别。
目前它返回:
<topNode>
<item1>1</item1>
<item2>2</item2>
<item3>3</item3>
</topNode>
但我真正需要的是:
<topNode>
<secondNode>
<item1>1</item1>
<item2>2</item2>
<item3>3</item3>
</secondNode>
</topNode>
我认为我需要做的是修改响应数据合同,但我不确定如何。目前它是这样写的:
[DataContract(Namespace = "http://example.com/myNamespace")]
public class dataResponse
{
[DataMember]
public string item1 { get; set; }
[DataMember]
public string item2 { get; set; }
[DataMember]
public string item3 { get; set; }
}
由于我还需要返回带有不同元素名称的XML,如果遇到错误,我最好还是要返回一个我可以自己格式化的XML文档。
任何帮助/指示都将不胜感激
答案 0 :(得分:1)
WCF方法有3种特殊的返回类型,可以让您更好地控制返回给客户端的内容:
System.ServiceModel.Channels.Message
Stream
byte[]
Stream和字节数组只是将Stream或数组中的数据返回给客户端。对于消息对象,您需要使用Message对象中的一个静态CreateMessage重载来创建要返回的实例。使用这些返回类型之一,您将不得不创建自己返回的XML,但我认为这就是您在这里寻找的。例如,您可以这样做:
[ServiceContract]
public interface: IMyContract
{
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "getXml")]
Stream ReturnAnyXml();
}
public class MyService : IMyContract
{
public Stream ReturnAnyXml()
{
WebOperationContext CurrentWebContext = WebOperationContext.Current;
if (CurrentWebContext != null)
{
CurrentWebContext.OutgoingResponse.ContentType = "text/xml";
String AnyXml = "<tag></tag>";
return new MemoryStream(Encoding.UTF8.GetBytes(AnyXml));
}
}
}