【发布时间】:2012-03-05 19:34:19
【问题描述】:
我收到一个在反序列化时遇到问题的 XML,我无法创建适合 XML 架构的类。
XML Schema(每个以“ts”开头的类型名称都是 SimpleType):
<xsd:element name="ConsultarSituacaoLoteRpsResposta">
<xsd:complexType>
<xsd:choice>
<xsd:sequence>
<xsd:element name="NumeroLote" type="tsNumeroLote" minOccurs="1" maxOccurs="1"/>
<xsd:element name="Situacao" type="tsSituacaoLoteRps" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
<xsd:element ref="ListaMensagemRetorno" minOccurs="1" maxOccurs="1"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="ListaMensagemRetorno">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MensagemRetorno" type="tcMensagemRetorno" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="tcMensagemRetorno">
<xsd:sequence>
<xsd:element name="Codigo" type="tsCodigoMensagemAlerta" minOccurs="1" maxOccurs="1"/>
<xsd:element name="Mensagem" type="tsDescricaoMensagemAlerta" minOccurs="1" maxOccurs="1"/>
<xsd:element name="Correcao" type="tsDescricaoMensagemAlerta" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
我收到:
XML 1
<ConsultarSituacaoLoteRpsResposta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd">
<NumeroLote>21</NumeroLote>
<Situacao>4</Situacao>
</ConsultarSituacaoLoteRpsResposta>
或 XML 2
<ConsultarSituacaoLoteRpsResposta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd">
<ListaMensagemRetorno>
<MensagemRetorno>
<Codigo>E01</Codigo>
<Mensagem>AAA</Mensagem>
<Correcao>BBB</Correcao>
</MensagemRetorno>
<MensagemRetorno>
<Codigo>E02</Codigo>
<Mensagem>CCC</Mensagem>
<Correcao>DDD</Correcao>
</MensagemRetorno>
</ListaMensagemRetorno>
</ConsultarSituacaoLoteRpsResposta>
在 2 个元素的序列和一个元素之间进行选择是个问题。我可以选择元素,但选择 2 元素和 1 元素没有。
如何创建一个类来反序列化此架构?
【问题讨论】:
-
您应该查看 xsd.exe,它将帮助您从 xsd 生成一个类,或者从 xml 创建一个 xsd,然后从 xsd 创建一个类
标签: c# .net deserialization xmlserializer