WCF REST请求和响应中的XML格式

时间:2011-02-10 12:46:03

标签: xml wcf serialization rest

我已经设置了一个WCF服务,它将在同一个方法中同时接受JSON和XML,并且同时支持SOAP和REST。

JSON工作正常,但我不知道XML的外观。

界面如下所示:

[ServiceContract]
public interface IWebService
{
    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare)]
    string[] EchoArray(string[] stringArray);
}

如果可能的话,我想保持XML尽可能简单,没有名称空间,如下所示:

<stringArray>
    <string>hello</string>
    <string>hola</string>
</stringArray>

响应也应该简单。

如果它有任何区别,我在代码中完成所有操作,没有任何web.config。

这样我就可以使用Azure辅助角色了。

2 个答案:

答案 0 :(得分:1)

我决定使用包装请求而不是裸(因为另一种方法需要它),并想出如何格式化它。

首先我改变了

[ServiceContract] 

[ServiceContract(Namespace = "")]

然后这工作:

<EchoArray>
    <stringArray xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <a:string>hello</a:string>
        <a:string>hola</a:string>
    </stringArray>
</EchoArray>

它可能在没有包装请求的情况下也可以工作,但为了保持一致性,我也将这个方法包装起来。

答案 1 :(得分:0)

如果要控制XML的外观,可以执行以下操作:

[ServiceContract]
public interface IWebService
{
    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare)]
    StringArray EchoArray(StringArray stringArray);
}

public class StringArray : IXmlSerializable {
        public XmlSchema GetSchema() {
            return null;
        }

        public void ReadXml(XmlReader reader) {
            // However you have formatted it
        }

        public void WriteXml(XmlWriter writer) {
            // However you want it formatted
        }
}