EXCEPTION DESEREALIZAR XML NFE.
Citação::
:
MESTRE
Verifiquei seu XML, e está normal, não está mal formatado. O que você precisa verificar é como está declarados os atributos da sua classe que foi gerada a partir de um schema.
Normalmente quando as classes são geradas por um schema ou pelo próprio arquivo xml, ele atribui o tipo do campo de acordo com a informação que tem no atributo. Só por desencargo, eu deserializei seu arquivo xml em meu projeto, e funcionou normalmente, ou seja, você precisa verificar como estão os tipos dos atributos da classe.
O pessoal falou do campo IE (inscrição estadual), de fato pode ser ele, pois quando criamos as classes a partir de um arquivo, normalmente a informação do campo é numérica, compostas por números inteiros. Neste caso, o VS atribui o tipo para ulong (que está em seu projeto). Para corrigir este erro, troque o tipo para string, e verifique os outros campos, que também podem estar com uma tipagem que não é a ideal.
Troquei de ulong para String ieField porem mesmo assim continua dando erro:
System.InvalidOperationException: [ô]Erro no documento XML (1, 40).[ô]
Inner Exception InvalidOperationException: <nfeProc xmlns=[ô]http://www.portalfiscal.inf.br/nfe[ô]> não era esperado.
Você tentou interpretar o erro?
Ele está dizendo que você não possui uma classe do tipo [Ô]nfeProc[Ô].
Uma solução seria você colocar uma decoração na sua classe, tipo essa.
[System.Xml.Serialization.XmlRootAttribute([Ô]nfeProc[Ô], Namespace = [Ô]http://www.portalfiscal.inf.br/nfe[Ô], IsNullable = false)]
Desta forma, você pode ter uma classe com qualquer nome, que na deserialização ele vai interpretar da forma correta.
Agora, na minha opinião você deveria gerar novamente as suas classes, utilizando o schema da NF-e, e não o arquivo xml para gerar a mesma.
Citação::
:
:
MESTRE
Verifiquei seu XML, e está normal, não está mal formatado. O que você precisa verificar é como está declarados os atributos da sua classe que foi gerada a partir de um schema.
Normalmente quando as classes são geradas por um schema ou pelo próprio arquivo xml, ele atribui o tipo do campo de acordo com a informação que tem no atributo. Só por desencargo, eu deserializei seu arquivo xml em meu projeto, e funcionou normalmente, ou seja, você precisa verificar como estão os tipos dos atributos da classe.
O pessoal falou do campo IE (inscrição estadual), de fato pode ser ele, pois quando criamos as classes a partir de um arquivo, normalmente a informação do campo é numérica, compostas por números inteiros. Neste caso, o VS atribui o tipo para ulong (que está em seu projeto). Para corrigir este erro, troque o tipo para string, e verifique os outros campos, que também podem estar com uma tipagem que não é a ideal.
Troquei de ulong para String ieField porem mesmo assim continua dando erro:
System.InvalidOperationException: [ô]Erro no documento XML (1, 40).[ô]
Inner Exception InvalidOperationException: <nfeProc xmlns=[ô]http://www.portalfiscal.inf.br/nfe[ô]> não era esperado.
Você tentou interpretar o erro?
Ele está dizendo que você não possui uma classe do tipo [Ô]nfeProc[Ô].
Uma solução seria você colocar uma decoração na sua classe, tipo essa.
[System.Xml.Serialization.XmlRootAttribute([Ô]nfeProc[Ô], Namespace = [Ô]http://www.portalfiscal.inf.br/nfe[Ô], IsNullable = false)]
Desta forma, você pode ter uma classe com qualquer nome, que na deserialização ele vai interpretar da forma correta.
Agora, na minha opinião você deveria gerar novamente as suas classes, utilizando o schema da NF-e, e não o arquivo xml para gerar a mesma.
Entendi, colocando no exemplo do @KERPLUNK na classe Nfe:
[XmlRoot([Ô]NFe[Ô], Namespace = [Ô]http://www.portalfiscal.inf.br/nfe[Ô], IsNullable = false)]
O problema é que ele nao dispara exception MAS me traz o objeto nota null..
Citação::
:
:
:
MESTRE
Verifiquei seu XML, e está normal, não está mal formatado. O que você precisa verificar é como está declarados os atributos da sua classe que foi gerada a partir de um schema.
Normalmente quando as classes são geradas por um schema ou pelo próprio arquivo xml, ele atribui o tipo do campo de acordo com a informação que tem no atributo. Só por desencargo, eu deserializei seu arquivo xml em meu projeto, e funcionou normalmente, ou seja, você precisa verificar como estão os tipos dos atributos da classe.
O pessoal falou do campo IE (inscrição estadual), de fato pode ser ele, pois quando criamos as classes a partir de um arquivo, normalmente a informação do campo é numérica, compostas por números inteiros. Neste caso, o VS atribui o tipo para ulong (que está em seu projeto). Para corrigir este erro, troque o tipo para string, e verifique os outros campos, que também podem estar com uma tipagem que não é a ideal.
Troquei de ulong para String ieField porem mesmo assim continua dando erro:
System.InvalidOperationException: [ô]Erro no documento XML (1, 40).[ô]
Inner Exception InvalidOperationException: <nfeProc xmlns=[ô]http://www.portalfiscal.inf.br/nfe[ô]> não era esperado.
Você tentou interpretar o erro?
Ele está dizendo que você não possui uma classe do tipo [Ô]nfeProc[Ô].
Uma solução seria você colocar uma decoração na sua classe, tipo essa.
[System.Xml.Serialization.XmlRootAttribute([Ô]nfeProc[Ô], Namespace = [Ô]http://www.portalfiscal.inf.br/nfe[Ô], IsNullable = false)]
Desta forma, você pode ter uma classe com qualquer nome, que na deserialização ele vai interpretar da forma correta.
Agora, na minha opinião você deveria gerar novamente as suas classes, utilizando o schema da NF-e, e não o arquivo xml para gerar a mesma.
Entendi, colocando no exemplo do @KERPLUNK na classe Nfe:
[XmlRoot([Ô]NFe[Ô], Namespace = [Ô]http://www.portalfiscal.inf.br/nfe[Ô], IsNullable = false)]
O problema é que ele nao dispara exception MAS me traz o objeto nota null..
Então, o que você precisa entender é que as classes precisam estar com a decoração, para que na deseliarização do xml eles possam ser [Ô]interpretados[Ô] e popular o objeto.
Você conseguiu resolver?
Eu acho que você está com o mesmo problema que estava, o arquivo XML começa pelo campo [Ô]nfeProc[Ô] ou seja, sua classe também tem que ter essa classe se não vai dar o erro que você mencionou.
Fiz um teste com a classe que o colega EDUFS postou funcionou perfeitamente para mim olha que tive que fazer a conversão para C#, você chegou a tentar no seu caso já está até VB.NET.
Citação:No passado, não conseguia deserealizar o xml baixado pelo site.
Com a ajuda do KERPLUNK, foi criado a classe em anexo.
Tenta com ela.
Dim serializer As New XmlSerializer(GetType(nfeProc))
Dim result As nfeProc = DirectCast(serializer.Deserialize(New XmlTextReader(arqXml)), nfeProc)