1
I have a method that makes a query to a Webservice, with the return I do a deserialization of the received XML. It turns out that if I do the desirialization in memory it gives a mistake saying:
xmlns="http://www.portalfiscal.inf.br/nfe" not expected
But if I do the same procedure saving the file on disk and using the StreamReader it works normally. I commented in the code which part is giving the error and which one is working.
There’s POG inside the foreach, please ignore, unless she’s the problem.
Why this error occurred?
XML:
<resNFe xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" versao="1.00" xmlns="http://www.portalfiscal.inf.br/nfe">
<chNFe>5616516516516516816165165156</chNFe>
<CNPJ>12345678654231</CNPJ>
<xNome>bla bla bla</xNome>
<IE>651651654</IE>
<dhEmi>2016-06-28T09:00:04-03:00</dhEmi>
<tpNF>1</tpNF>
<vNF>10049.69</vNF>
<digVal>asdasdasdzc5asr41fa564s</digVal>
<dhRecbto>2016-06-28T09:16:34-03:00</dhRecbto>
<nProt>3531351313235151</nProt>
<cSitNFe>1</cSitNFe>
</resNFe>
Code:
public void ConsultaDfe(string CNPJ)
{
DistribuicaoDFe xmlDfe = new DistribuicaoDFe();
xmlDfe.ModeloDocumento = "NFE";
xmlDfe.Versao = "1.0";
xmlDfe.CNPJEmissor = CNPJ;
xmlDfe.TpAmb = "1";
xmlDfe.UsarUltimoNSU = "N";
ClienteWebService cliente = new ClienteWebService();
XDocument Xml = cliente.Envio(SerializaObjeto.SerializeToString(xmlDfe), CNPJ);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(RetornoDFe));
XmlReader reader = Xml.CreateReader();
RetornoDFe retornoDFe = (RetornoDFe)xmlSerializer.Deserialize(reader);
foreach (var item in retornoDFe.Documentos)
{
XmlNode[] _docXml = (XmlNode[])item.DocXML;
string base64 = _docXml[0].Value.ToString();
byte[] buffer = Convert.FromBase64String(base64);
MemoryStream ms = new MemoryStream(buffer);
XmlDocument doc = new XmlDocument();
doc.Load(ms);
XmlSerializer _xmlSerializer = new XmlSerializer(typeof(resNFe));
XmlReader _reader = new XmlNodeReader(doc);
//Não funciona - xmlns:"" não esperado
var _resNFe = (resNFe)xmlSerializer.Deserialize(_reader);
}
// Funciona 100%
var resnfe = new resNFe();
string caminho = @"C:\home\13160604301024000131550010001971591190360567.xml";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(resNFe));
StreamReader reader = new StreamReader(caminho);
resnfe = (resNFe)xmlSerializer.Deserialize(reader);
reader.Close();
}
Young, it worked wonderfully. I missed a day with it. Thank you for sharing your knowledge. I’ve already searched and I still don’t understand why you made a mistake with Xmlreader.......
– Robss70