2013-03-04 160 views
3

考虑.NET客户端调用定义为Web引用的远程XML SOAP Web服务。客户端调用服务,并试图将返回的XML反序列化为对象。XML文档中有错误;反序列化时EndElement是无效的XmlNodeType

Web方法正常执行,并且从服务返回的XML格式正确,在Fiddler中确认。 Web服务是一种已知的良好工作服务,因为我们有另一个客户端(.NET 2.0)正常使用它。

当.NET Web服务代理类试图反序列化返回的XML,这个错误被抛出:

System.InvalidOperationException:有XML文档(1,1999年)中的错误。 ---> System.Xml.XmlException:'EndElement'是一个无效的XmlNodeType。在System.Xml.XmlReader.ReadStartElement()
在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader_PRPA_AR101202_Service.Read135_MCCI_MT000200LocatedEntity(布尔ISNULLABLE,布尔checkType)

的行/列(1行1,1999年位置, 1999),它的抱怨XML response的是/</device>

<sender> 
    <device> 
     ..snip.. 
     <location classCode="IDENT" realmCode="xyz" /> 
    </device> 

我如何解决与.NET反序列化这个问题?

没有分辨率/详细信息尝试的解决方案:

+0

是否有相应的(和之前)? – ChrisBint 2013-03-04 22:46:36

+0

@ChrisBint他的代码包含相应的和前面的。希望..snip ..不包含额外的 csj 2013-03-04 23:17:20

+0

@ p.campbell是整个错误是被抛出还是只是它的一部分? – mostruash 2013-03-04 23:23:38

回答

0

我使用的.config的调整,迫使XML序列化使用旧行为:

<configuration> 
    <system.xml.serialization> 
     <xmlSerializer useLegacySerializerGeneration="true" />  
    </system.xml.serialization> 
</configuration> 

Serialization or deserialization failures when you run existing XML serialization code in WCF 4.5

+0

所以他们在4.5中优化了'XmlSerializer',但提供了一种不使用它的方法。这是否意味着4.5'XmlSerializer'中存在一个错误,或者XML有什么问题? – groverboy 2013-03-12 00:14:59

+0

@groverboy确定我是反序列化的XML是有效的。这是一个现有的工作WS,正在被一个新客户使用。所以你遇到了一个很好的问题:他们为什么要保留一个传统的交换机?另一部分是假定特定对象模型的Web引用。也许“旧式”WR预期的输入不同于4.5“新”串行器可以输出的输入。我很高兴这是一个配置设置,解决了我的问题。 – 2013-03-12 04:05:30

0
任何修复

stacktrace的第二行表明xml处理器需要一个元素locatedEntity在第二个device元素内。所述device元件的结束标签可以推断出不存在这种元件的最早位置。

查看命名空间"urn:hl7-org:v3"的架构文档;可能location已被错误地使用,而不是locatedEntity

相关问题