我正在使用调用 Web 服务并在客户端上使用 WCF 生成的服务引用。我已将从测试服务接收到的 XML 响应保存到磁盘(没有 SOAP 信封和正文标记)我想从磁盘加载它们并从中创建对象。让我们从我的网络服务中采用以下方法:
SomeMethodResponse SomeMethod(SomeMethodRequest req)
我手动(通过 SOAP UI)将响应保存到磁盘到文件,示例响应:
<SomeMethodResponse xmlns="http://myNamespace">
<SomeMember1>value</SomeMember1>
</SomeMethodResponse>
然后我尝试使用以下方法从文件中反序列化对象:
DataContractSerializer dcs =
new DataContractSerializer(typeof(SomeMethodResponse))
这失败了——序列化程序抱怨错误,它期待命名空间“ http://schemas.datacontract.org/2004/07 ”中的元素,但在“ http://myNamespace ”中找到元素。
问题:为什么不DataContractSerializer
使用在 SomeMethodResponseType 上声明的命名空间XmlTypeAttribute(Namespace="http://myNamespace")
?
我可以通过向DataContractSerializer
构造函数显式提供命名空间和根元素来解决这个问题。但随后它失败,消息类似于:
X 行位置 Y(XML 文档的最后一行)出错。'EndElement' 'SomeMethodResponse
来自命名空间'httpmyNapespace' 不是预期的。期待元素“someNameField”。
SomeName
是 Web 服务正在使用的 XSD 中的一个元素。它也是SomeMethodResponse
类型的一个属性,由名为 的私有字段支持someNameField
。看起来DataContractSerializer
除了属性之外,它还试图反序列化这些字段。
如何使从磁盘保存的 XML 脱轨并取回 SomeMethod 返回的相同类型的对象?
谢谢, 马特拉