gpt4 book ai didi

c# - 强制 ASMX 代理使用 XmlSerializer 而不是 DataContractSerializer

转载 作者:行者123 更新时间:2023-11-30 17:15:04 24 4
gpt4 key购买 nike

我们获得了必须在项目中使用的外部 SOAP 服务。所有这些都提供 WSDL 数据,但其中很多都不是 .NET 服务(其中大部分是用 Java 编写的)。我们已经使用 wsdl.exe 工具生成了许多客户端代理。这个工具做它应该做的,它创建代理供我们使用。

一旦我们尝试使用生成的代理调用这些服务上的方法,问题就会出现。我们拦截所有用于记录目的的 SOAP 请求,并且 XML 数据看起来与 WSDL 模式中指定的数据不同。

例如,如果一个字段名为“Name”,我们的代理会将其序列化为“nameField”。我猜这是因为名为“Name”的属性使用了一个名为“nameField”的支持字段。对方的服务显然无法解释这种命名约定。

如果我们的 ASMX 代理使用旧的 XmlSerializer,则不会发生这种情况,但出于某种原因,他们选择了 DataContractSerializer,这完全搞乱了序列化并破坏了客户端和服务之间的兼容性。

我的同事采用手动构建 XML 数据,然后使用 HttpWebRequest 类发送它。我认为这在 2011 年是完全不能接受的,这就是自动生成代理的目的。

我的问题是:为什么会这样?为什么我们的代理使用 DataContractSerializer 并因此忽略进程中的所有 xml 序列化属性?有没有办法强制他们再次使用 XmlSerializer?

我们使用 .NET 4.0。

最佳答案

如果您使用的是 WCF,则默认为 DataContractSerializer。如果类型没有明确的[DataContract]/[DataMember] 标记,则DataContractSerializer 将使用字段,这听起来像是正在发生的事情。

要改为使用 XmlSerializer,请将 [XmlSerializerFormat] 添加到您的服务。参见 MSDN .

您也可以尝试将 [XmlType][XmlRoot] 添加到您的类中(如果尚不存在的话)。

关于c# - 强制 ASMX 代理使用 XmlSerializer 而不是 DataContractSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8246676/

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