public override T LerXML <T>(XmlDocument doc) { if (typeof(T) != typeof(EnvEvento)) { throw new InvalidCastException($"Cannot cast type '{typeof(T).Name}' into type '{typeof(EnvEvento).Name}'."); } var retornar = base.LerXML <T>(doc) as EnvEvento; var eventos = doc.GetElementsByTagName("evento"); if ((eventos?.Count ?? 0) > 0) { retornar.Evento = new Evento[eventos.Count]; var index = 0; foreach (XmlElement xmlEl in eventos) { var xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); xml.Append($"<envEvento xmlns=\"{xmlEl.NamespaceURI}\">"); xml.Append($"{xmlEl.OuterXml}</envEvento>"); var envEvt = XMLUtility.Deserializar <EnvEvento>(xml.ToString()); var evt = envEvt.Evento[0]; SignEvent(evt, xmlEl); retornar.Evento[index++] = evt; } } return((T)(object)retornar); }
private void SignEvent(Evento evento, XmlElement xmlEl) { var signature = xmlEl.GetElementsByTagName("Signature")[0]; if (signature != null) { var signatureEvento = new XmlDocument(); signatureEvento.LoadXml(signature.OuterXml); evento.Signature = XMLUtility.Deserializar <Signature>(signatureEvento); } }
/// <summary> /// Deserializar XML (Converte o XML para um objeto) /// </summary> /// <typeparam name="T">Tipo do objeto</typeparam> /// <param name="doc">Conteúdo do XML a ser deserilizado</param> /// <returns>Retorna o objeto com o conteúdo do XML deserializado</returns> public virtual T LerXML <T>(XmlDocument doc) where T : new() { return(XMLUtility.Deserializar <T>(doc)); }