4

将 WCF Restful 服务与 XmlSerializer 一起使用,我得到以下响应。

<?xml version="1.0" encoding="utf-8"?>
<availabilityResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://xyz.com/ABCService">
  <availabilityResult>
    <title xsi:type="Availability_1">
      <titleId>0010327457</titleId>
      <availability>
        <purchasable>false</purchasable>
        <availableCopies>0</availableCopies>
        <totalCopies>0</totalCopies>
      </availability>
    </title>    
  </availabilityResult>
</availabilityResponse>

(我希望删除 xmlns:xsd、xmlns:xsi 和 xsi:type 标签)

“Availability_1”是我在代码中使用的一种派生类型。我真的不想在回复中显示这一点。

我通过在服务合同中指定 [XmlSerializerFormat] 来使用 XmlSerialzer。WCF 能够正确序列化我的响应,但我唯一的问题是额外的 xmlns 标记。是的,我知道它们在那里很有用。但是,客户端只对纯 xml 感兴趣。

通过查看 stackoverflow 中的各种帖子,我了解到我可以通过覆盖 XmlTextWriter 的一些方法来做到这一点。但我遇到的问题是如何让 WCF 知道在序列化时使用我的 customXmlWriter(继承自 XmlTextWriter)而不是通用 XmlTextWriter。

如何将我的 customXmlTextWriter 传递给我目前没有任何控制权的 XmlSerializer。

我刚刚创建了我的数据类并从我的角度定义了服务合同方法,但我不必从我这边做任何序列化的事情,因为 WCF 会自行处理它。

4

1 回答 1

0

一个稍微不同的想法,但它在关注点分离的路线上,因为编写自定义序列化程序以实际使响应从真正的合规原则中看到的那种“无效”可以被视为一种反模式。

我的想法是开发自己的 IIS 自定义 HTTP 处理程序并将其添加到 IIS 处理管道中。这样做,将允许您公开调整后的响应和完全合规的响应。

自定义 HTTP 处理程序可以使用简单的 XSLT 来删除所需的名称空间。

看看这篇文章开始 - http://www.iis.net/learn/develop/runtime-extensibility/developing-iis-modules-and-handlers-with-the-net-framework

于 2014-03-30T09:11:37.697 回答