gpt4 book ai didi

wcf - 如何使用 XMLSerializer 从 WCF 输出中删除 xmlns :xsd, xmlns :xsi, xsi:type

转载 作者:行者123 更新时间:2023-12-04 15:44:31 29 4
gpt4 key购买 nike

将 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”是我在代码中使用的一种派生类型。我真的不想在回复中显示这一点。

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

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

如何将我的 customXmlTextWriter 传递给 XmlSerializer,此时我没有任何控制权。

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

最佳答案

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

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

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

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

关于wcf - 如何使用 XMLSerializer 从 WCF 输出中删除 xmlns :xsd, xmlns :xsi, xsi:type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12431153/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com