[英]Using XmlSerializer to deserialize complex type elements with choice
我收到反序列化有問題的XML,無法創建適合XML模式的類。
XML模式(每個以“ 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個元素就沒有。
如何創建一個類以反序列化此模式?
這應該工作。 如果ListaMensagemRetorno.Count>0
則表示您已反序列化xml2,否則已xml1
public class ConsultarSituacaoLoteRpsResposta
{
public int NumeroLote { set; get; }
public int Situacao { set; get; }
public List<MensagemRetorno> ListaMensagemRetorno { get; set; }
}
public class MensagemRetorno
{
public string Codigo { set; get; }
public string Mensagem { set; get; }
public string Correcao { set; get; }
}
XmlSerializer serializer = new XmlSerializer(typeof(ConsultarSituacaoLoteRpsResposta), "http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd");
var obj1 = (ConsultarSituacaoLoteRpsResposta)serializer.Deserialize(new StringReader(xml1));
var obj2 = (ConsultarSituacaoLoteRpsResposta)serializer.Deserialize(new StringReader(xml2));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.