从WCF restful响应中删除xml命名空间

Dun*_*can 18 xml wcf serialization namespaces

我正在使用WCF将普通的旧XML(POX)文档返回给调用者.我正在使用XML Serializer格式化程序将对象转换为XML.

在返回的文档中,我为XML Schema和实例提供了一些无关的xml命名空间引用(在ASMX版本中没有).我在Web上看到了各种不应删除的参数,我不会为了返回纯XML文档而购买这些参数.

从WCF中返回的XML文档中删除这些xmlns引用的最简单方法是什么?

签名如下:

public ResponseInfo Process(string input) {
}
Run Code Online (Sandbox Code Playgroud)

Kev*_*ock 19

您可以通过将DataContract属性的Namespace参数设置为空字符串来删除XML命名空间,如下所示:

[DataContract(Namespace = "")]
public class ResponseInfo
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助...

  • 从我的测试来看,这种方法没有摆脱xmlns:i ="http://www.w3.org/2001/XMLSchema-instance"声明 (22认同)

小智 7

我有同样的问题.添加BodyStyle:= WebMessageBodyStyle.Bare 到WebInvoke为我工作.响应不再包含在元数据中.


chr*_*ton 5

我假设你正在尝试而不是在xml的开头得到这样的东西:

<ResponseInfo 
   xmlns="http://schemas.datacontract.org/2004/07/ResponseInfo"
   xmlns:i="http://www.w3.org/2001/XMLSchema-instance" >
Run Code Online (Sandbox Code Playgroud)

你想要的只是:

<ResponseInfo>
Run Code Online (Sandbox Code Playgroud)

可悲的是,我还没有看到一个简单的方法来删除这些领域.我正在谷歌搜索解决方案,大多数删除它的选项需要创建自己的消息检查器或您自己的编码器.


Sai*_*udo 1

在我在 WCF RESTful 入门套件之前编写的 RESTful WCF 服务中,我执行了以下操作,这给了我良好、干净的结果。

首先,确保设置了 webHttp 端点行为:

  <endpointBehaviors>
    <behavior name="Web">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
Run Code Online (Sandbox Code Playgroud)

您的端点应如下所示(为了简单起见,减去合同):

<endpoint address="" binding="webHttpBinding" behaviorConfiguration="Web" />
Run Code Online (Sandbox Code Playgroud)

我的服务合同中有以下操作合同:

    [WebGet(UriTemplate="tasks", ResponseFormat=WebMessageFormat.Xml )]
    [OperationContract]
    Task[] GetTasks();

    [WebGet(UriTemplate="tasks/{id}", ResponseFormat=WebMessageFormat.Xml)]
    [OperationContract]
    Task GetTask(string id);
Run Code Online (Sandbox Code Playgroud)

服务实现本身没有什么特别之处。您可以尝试更改 WebMessageFormat,但枚举中唯一的其他项目是“json”。