2010-12-27 4 views
0

Ich habe folgendes Schema:XmlSerializer Mit deserialisieren komplexen Typ Elemente null sind

<?xml version="1.0"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tipos="http://www.ginfes.com.br/tipos_v03.xsd" targetNamespace="http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_resposta_v03.xsd" 
      xmlns="http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_resposta_v03.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified"> 
<xsd:import schemaLocation="tipos_v03.xsd" namespace="http://www.ginfes.com.br/tipos_v03.xsd" /> 
<xsd:element name="ConsultarSituacaoLoteRpsResposta"> 
    <xsd:complexType> 
    <xsd:choice> 
    <xsd:sequence> 
    <xsd:element name="NumeroLote" type="tipos:tsNumeroLote" minOccurs="1" maxOccurs="1"/> 
    <xsd:element name="Situacao" type="tipos:tsSituacaoLoteRps" minOccurs="1" maxOccurs="1"/> 
    </xsd:sequence> 
    <xsd:element ref="tipos:ListaMensagemRetorno" minOccurs="1" maxOccurs="1"/> 
    </xsd:choice> 
    </xsd:complexType> 
</xsd:element> 
</xsd:schema> 

und die folgende Klasse:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_envio_v03.xsd")] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_envio_v03.xsd", IsNullable = false)] 
public partial class ConsultarSituacaoLoteRpsEnvio 
{ 
    [System.Xml.Serialization.XmlElementAttribute(Order = 0)] 
    public tcIdentificacaoPrestador Prestador { get; set; } 

    [System.Xml.Serialization.XmlElementAttribute(Order = 1)] 
    public string Protocolo { get; set; } 
} 

Verwenden Sie den folgenden Code, um das Objekt zu deserialisieren:

XmlSerializer respSerializer = new XmlSerializer(typeof(ConsultarSituacaoLoteRpsResposta)); 
StringReader reader = new StringReader(resp); 
ConsultarSituacaoLoteRpsResposta respModel = (ConsultarSituacaoLoteRpsResposta)respSerializer.Deserialize(reader); 

tritt kein Fehler auf, aber die Eigenschaften von Objekten sind null, weiß jemand, was passiert?

Antwort

1

Nun, ich denke, Sie könnten nur den XML-Namespace ignorieren und das könnte Ihr Problem sein. In Ihrem XSD definieren Sie einen Standard-XML-Namespace:

<xsd:schema 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:tipos="http://www.ginfes.com.br/tipos_v03.xsd" 
    targetNamespace="http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_resposta_v03.xsd" 
    xmlns="http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_resposta_v03.xsd" 
    attributeFormDefault="unqualified" elementFormDefault="qualified"> 

Siehe xmlns="http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_resposta_v03.xsd" Attribut? Dies definiert einen Standard-XML-Namespace.

Also, wenn Sie gehen, um Ihre Daten deserialisieren, sollten Sie auch, dass die Standard-XML-Namespace in den Deserializer liefern:

XmlSerializer respSerializer = new 
    XmlSerializer(typeof(ConsultarSituacaoLoteRpsResposta), 
       "http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_resposta_v03.xsd"); 
StringReader reader = new StringReader(resp); 
ConsultarSituacaoLoteRpsResposta respModel = 
    (ConsultarSituacaoLoteRpsResposta)respSerializer.Deserialize(reader); 

diese Arbeit mit der Einbeziehung des XML-Standard-Namespace?

+0

Ich habe Herrschaft über das Schema, das XML nur erhalten und verarbeiten, ich werde versuchen, die Namespaces zu entfernen, um zu sehen, ob es funktioniert. Danke – Jean

+0

ok, funktioniert ohne Namensraum in der Klasse, tks – Jean

1

ConsultarSituacaoLoteRpsResposta! = ConsultarSituacaoLoteRpsEnvio

Sie einfacher Namen verwendet haben könnte, war es schwer zu erkennen :)

Sie auch XML-Validierung verwenden sollten (XmlReaderSettings unterstützt es einrichten) die Probleme sofort zu identifizieren. Und stellen Sie zumindest sicher, dass der Code direkt aus dem XSD generiert wurde, da es hier Unterschiede gibt.

+0

Aber er versucht, in einen 'ConsultarSituacaoLoteRpsResposta'-Typ zu deserialisieren - ich würde sagen, dass ** das ist, was im XML-Schema definiert ist, nein? –

+1

Hmm, Sie könnten Recht haben. Wie auch immer, es ist eine völlige Unordnung, weil er das Schema für etwas anderes veröffentlicht hat. – fejesjoco

Verwandte Themen