【发布时间】:2012-09-14 19:57:36
【问题描述】:
将 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 会自行处理它。
【问题讨论】:
-
我可以在link 找到一个工作示例。这工作正常,但在我的情况下有副作用,我有一个支持 SOAP 和 Restful 请求的操作合同。通过实施上述帖子中提到的解决方案,我的 Restful 结果没有任何 xmlns 标记,但我的 SOAP 请求失败。为了解决这个问题,我必须为 SOAP 和 Rest 制定 2 份合同。
标签: wcf xmlserializer