2014-01-21 5 views
1

ОБНОВЛЕНИЕ 1 Проблема заключается не в множественном пространстве имен. я не знаю, почему, но если создать объект из созданного класса, назначенное поле Подписи вручную и сериализовать объект, пространство имен узла Подписи узла является:Xml десериализация C# с кратными пространствами имен

<Signature xmlns="http://www.abrasf.org.br/nfse.xsd"> 

вместо

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 

Если я назначить сертификат XML usign, пространство имен сигнатура

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 

с первого пространства имен, я могу deseralizate без проблем, но мне нужно знак.

Generated Class from wsdl using wsdl.exe

WSDL


EnviarLoteRpsEnvio из nfse.xsd

schema EnviarLoteRpsEnvio класс:

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.17929")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true,  Namespace="http://www.abrasf.org.br/nfse.xsd")] 
public partial class EnviarLoteRpsEnvio 
{ 

    private tcLoteRps loteRpsField; 

    private SignatureType signatureField; 

    /// <remarks/> 
    public tcLoteRps LoteRps 
    { 
     get { return this.loteRpsField; } 
     set { this.loteRpsField = value; } 
    } 

    /// <remarks/> 
    public SignatureType Signature 
    { 
     get { return this.signatureField; } 
     set { this.signatureField = value; } 
    } 
} 

SignatureTypeClass:

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.17929")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2000/09/xmldsig#")] 
public partial class SignatureType { 

    private SignedInfoType signedInfoField; 

    private SignatureValueType signatureValueField; 

    private KeyInfoType keyInfoField; 

    private ObjectType[] objectField; 

    private string idField; 

    /// <remarks/> 
    public SignedInfoType SignedInfo { 
     get { 
      return this.signedInfoField; 
     } 
     set { 
      this.signedInfoField = value; 
     } 
    } 

    /// <remarks/> 
    public SignatureValueType SignatureValue { 
     get { 
      return this.signatureValueField; 
     } 
     set { 
      this.signatureValueField = value; 
     } 
    } 

Из сгенерированных классов, был создан в последующих XML:

xml generated

Но когда я пытаюсь deserealize этот XML, используя функцию:

public static object DeserializarParaObjeto(string xmlStr, Type tipo) 
{ 
    TextReader tx = new StringReader(xmlStr); 
    XmlSerializer deSerializer = new XmlSerializer(tipo); 
    deSerializer.UnknownAttribute += deSerializer_UnknownAttribute; 
    deSerializer.UnknownElement += deSerializer_UnknownElement; 
    deSerializer.UnknownNode += deSerializer_UnknownNode;    
    deSerializer.UnreferencedObject += deSerializer_UnreferencedObject; 

    return deSerializer.Deserialize(tx); 
} 

deSerializer_UnknownNode событие (узел неизвестен, подпись). Объект сгенерирован, но подпись узла не назначена.

Это происходит потому, что xml содержит несколько пространств имен?

Что мне нужно сделать в этом случае?

Ps: Я не размещаю все xml и схемы, потому что слишком велик.

ответ

0

Я решаю свою проблему, на самом деле проблема была не моя.

Мне нужно было вручную отредактировать класс, созданный wsdl.ехе и добавить XmlRootAttribute на:

частичного класса EnviarLoteRpsEnvio:

[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.abrasf.org.br/nfse.xsd", IsNullable = false)] 

Частичный класс Подпись:

[System.Xml.Serialization.XmlRootAttribute("Signature", Namespace = "http://www.w3.org/2000/09/xmldsig#", IsNullable = false)] 

И porperty SignatureType Подпись частичного класса EnviarRpsEnvio:

[System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.w3.org/2000/09/xmldsig#")] 

Я знаю, что мы никогда не должны изменять но у меня не было альтернативы в этом случае.

Смежные вопросы