【发布时间】:2014-04-13 11:26:03
【问题描述】:
我有一个 C# 项目,我在其中通过 WSDL 文件添加了 WCF 服务引用。因为我不想使用“DataContractSerializer”,所以我更改了“Reference.svcmap”并将Serializer 设置为“XmlSerializer”。此时一切正常。
现在解决问题。服务不是我的服务,它可以是,服务的程序员向结果类添加属性,我不能同时更新我的参考。因此,我导入的 WSDL 可能已过时。这种情况下反序列化后的结果是不正确的。
例如,结果具有“名称”、“街道”和“城镇”属性。如果服务现在返回...
<?xml version="1.0" encoding="UTF-8"?>
<TestResult xmlns="http://test.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Name>Tim</Name>
<Street>Samplestreet</Street>
<Town>Sampletown</Town>
</TestResult>
我的结果具有以下值:
姓名=蒂姆
街道=Samplestreet
Town=Sampletown
如果服务程序员现在在“Name”和“Street”之间添加属性“Fullname”并且我的 WSDL 导入已过期,则结果将变得不正确。服务返回...
<?xml version="1.0" encoding="UTF-8"?>
<TestResult xmlns="http://test.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Name>Tim</Name>
<FullName>Tim Brown</FullName>
<Street>Samplestreet</Street>
<Town>Sampletown</Town>
</TestResult>
但反序列化后我的结果有值:
姓名=蒂姆
街道=空
城镇=null
看起来 WCF 的 XmlSerialzier 在无异常发现 UnknownElement 时停止反序列化。
问题,是否有设置、配置服务引用的方法、SoapClient 或 Serializier 以忽略 UnknownElement 并像标准 XmlSerialzier 一样继续反序列化如何返回它知道的所有值?
或者有没有办法在 WCF SoapClient 的客户端使用自己的 Serialzier?
【问题讨论】:
标签: c# web-services wcf wsdl xml-serialization