none
¿Cómo puedo setear las propiedades de una clase desde una cadena que posee formato XML? RRS feed

  • Pergunta

  • Consulto un WebService y me devuelve una cadena con formato XML y nesecito establecer los valores correspondientes en los atributos de una clase.

    ¿Cómo puedo hacer esto?

    Cadena Xml:

    <XML_OUTPUT>
             <CONSULTA_PRESTAMO>
              <PRESTAMO>
               <CLIENTE_NUMERO>0001000082</CLIENTE_NUMERO>
               <SUCURSAL>382</SUCURSAL>
               <PRESTAMO_NUMERO>5000000127</PRESTAMO_NUMERO>
               <PRODUCTO_EXTERNO>PRCO_938</PRODUCTO_EXTERNO>
               <FECHA_ALTA>20160401</FECHA_ALTA>
               <FECHA_VTO>20170401</FECHA_VTO>
               <FECHA_DESEMBOLSO>20160401</FECHA_DESEMBOLSO>
               <CAPITAL_ORIGINAL>26000.00</CAPITAL_ORIGINAL>
               <METODO>F</METODO>
               <PLAZO>012</PLAZO>
               <TASA_TIPO>F</TASA_TIPO>
               <TASA>18.0000000000</TASA>
               <DEBITO>382-0123456999</DEBITO>
               <CREDITO>ZZ-3-382-0123456999</CREDITO>
               <MONTO_ULTIMA_CUOTA>2737.42</MONTO_ULTIMA_CUOTA>
               <MONTO_ADEUDADO>26000.00</MONTO_ADEUDADO>
               <FECHA_ULTIMO_PAGO>00000000</FECHA_ULTIMO_PAGO>
               <MONEDA>ARS</MONEDA>
               <VIA_PAGO>3</VIA_PAGO>
               <SITUACION_PRESTAMO>1</SITUACION_PRESTAMO>
               <OBJETO_CONTRATO>GA</OBJETO_CONTRATO>
               <MEDIO>PI</MEDIO>
               <ULTIMA_CUOTA>000</ULTIMA_CUOTA>
               <ULTIMA_CUOTA_ESTADO>00</ULTIMA_CUOTA_ESTADO>
               <GARANTIA>
                <ID_GARANTIA>GARA_501</ID_GARANTIA>
                <DESCRIPCION_GARANTIA>AVAL /SGR INCRP CANC<30 DIAS</DESCRIPCION_GARANTIA>
               </GARANTIA>
               <IMPUESTOS>
                <IMPUESTO>
                 <IMP_ID>952500</IMP_ID>
                 <IMP_DESC>2- Comisión desembol</IMP_DESC>
                 <IMP_MONTO>260.00</IMP_MONTO>
                </IMPUESTO>
                <IMPUESTO>
                 <IMP_ID>952801</IMP_ID>
                 <IMP_DESC>4- IVA Desembolso</IMP_DESC>
                 <IMP_MONTO>54.60</IMP_MONTO>
                </IMPUESTO>
                <IMPUESTO>
                 <IMP_ID>952804</IMP_ID>
                 <IMP_DESC>4- IVA Desembolso Se</IMP_DESC>
                 <IMP_MONTO>67.41</IMP_MONTO>
                </IMPUESTO>
                <IMPUESTO>
                 <IMP_ID>952820</IMP_ID>
                 <IMP_DESC>4- Impuesto Sello Mu</IMP_DESC>
                 <IMP_MONTO>312.00</IMP_MONTO>
                </IMPUESTO>
                <IMPUESTO>
                 <IMP_ID>952825</IMP_ID>
                 <IMP_DESC>4- Imp.al Sello Soli</IMP_DESC>
                 <IMP_MONTO>9.00</IMP_MONTO>
                </IMPUESTO>
                <IMPUESTO>
                 <IMP_ID></IMP_ID>
                 <IMP_DESC>GASTOS_IMP_DESEMBOLS</IMP_DESC>
                 <IMP_MONTO>703.01</IMP_MONTO>
                </IMPUESTO>
               </IMPUESTOS>
               <ERROR></ERROR>
              </PRESTAMO>
             </CONSULTA_PRESTAMO>
    </XML_OUTPUT>
    Clase:
    public class PrestamoImputado
        {
            [XmlRoot(ElementName = "XML_OUTPUT")]
            public class XML_OUTPUT
            {
                [XmlElement(ElementName = "CONSULTA_PRESTAMO")]
                public CONSULTA_PRESTAMO CONSULTA_PRESTAMO { get; set; }
            }
    
            [XmlRoot(ElementName = "CONSULTA_PRESTAMO")]
            public class CONSULTA_PRESTAMO
            {
                [XmlElement(ElementName = "PRESTAMO")]
                public PRESTAMO PRESTAMO { get; set; }
            }
    
            [XmlRoot(ElementName = "PRESTAMO")]
            public class PRESTAMO
            {
                [XmlElement(ElementName = "CLIENTE_NUMERO")]
                public string CLIENTE_NUMERO { get; set; }
                [XmlElement(ElementName = "SUCURSAL")]
                public string SUCURSAL { get; set; }
                [XmlElement(ElementName = "PRESTAMO_NUMERO")]
                public string PRESTAMO_NUMERO { get; set; }
                [XmlElement(ElementName = "PRODUCTO_EXTERNO")]
                public string PRODUCTO_EXTERNO { get; set; }
                [XmlElement(ElementName = "FECHA_ALTA")]
                public string FECHA_ALTA { get; set; }
                [XmlElement(ElementName = "FECHA_VTO")]
                public string FECHA_VTO { get; set; }
                [XmlElement(ElementName = "FECHA_DESEMBOLSO")]
                public string FECHA_DESEMBOLSO { get; set; }
                [XmlElement(ElementName = "CAPITAL_ORIGINAL")]
                public string CAPITAL_ORIGINAL { get; set; }
                [XmlElement(ElementName = "METODO")]
                public string METODO { get; set; }
                [XmlElement(ElementName = "PLAZO")]
                public string PLAZO { get; set; }
                [XmlElement(ElementName = "TASA_TIPO")]
                public string TASA_TIPO { get; set; }
                [XmlElement(ElementName = "TASA")]
                public string TASA { get; set; }
                [XmlElement(ElementName = "DEBITO")]
                public string DEBITO { get; set; }
                [XmlElement(ElementName = "CREDITO")]
                public string CREDITO { get; set; }
                [XmlElement(ElementName = "MONTO_ULTIMA_CUOTA")]
                public string MONTO_ULTIMA_CUOTA { get; set; }
                [XmlElement(ElementName = "MONTO_ADEUDADO")]
                public string MONTO_ADEUDADO { get; set; }
                [XmlElement(ElementName = "FECHA_ULTIMO_PAGO")]
                public string FECHA_ULTIMO_PAGO { get; set; }
                [XmlElement(ElementName = "MONEDA")]
                public string MONEDA { get; set; }
                [XmlElement(ElementName = "VIA_PAGO")]
                public string VIA_PAGO { get; set; }
                [XmlElement(ElementName = "SITUACION_PRESTAMO")]
                public string SITUACION_PRESTAMO { get; set; }
                [XmlElement(ElementName = "OBJETO_CONTRATO")]
                public string OBJETO_CONTRATO { get; set; }
                [XmlElement(ElementName = "MEDIO")]
                public string MEDIO { get; set; }
                [XmlElement(ElementName = "ULTIMA_CUOTA")]
                public string ULTIMA_CUOTA { get; set; }
                [XmlElement(ElementName = "ULTIMA_CUOTA_ESTADO")]
                public string ULTIMA_CUOTA_ESTADO { get; set; }
                [XmlElement(ElementName = "GARANTIA")]
                public GARANTIA GARANTIA { get; set; }
                [XmlElement(ElementName = "IMPUESTOS")]
                public string IMPUESTOS { get; set; }
                [XmlElement(ElementName = "ERROR")]
                public string ERROR { get; set; }
            }
    
            [XmlRoot(ElementName = "GARANTIA")]
            public class GARANTIA
            {
                [XmlElement(ElementName = "ID_GARANTIA")]
                public string ID_GARANTIA { get; set; }
                [XmlElement(ElementName = "DESCRIPCION_GARANTIA")]
                public string DESCRIPCION_GARANTIA { get; set; }
            }
    
        }



    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    quarta-feira, 19 de fevereiro de 2020 21:23

Respostas

Todas as Respostas

  • hola

    Si tienes el xml y la estructura de clases que mapea con este solo queda deserializar

    Cómo deserializar un objeto mediante XmlSerializer

    algo como ser

    var serializer = new XmlSerializer(typeof(XML_OUTPUT));
    
    using (TextReader reader = new StringReader(sourceXML))
    {
      var putput = (XML_OUTPUT)serializer.Deserialize(reader);
    }



    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    quarta-feira, 19 de fevereiro de 2020 21:33
  • Te envío un código que utilizo para leer  un xml

    Crea una instancia de documento XML -->XmlDocument xmlDoc = new XmlDocument();

    Asignas el XML a una variable tipo XmlDocument --> xmlDoc.LoadXml(strTipoCambio);

    Y ya puedes navegar en el XML. Cuando tengas el XMLDocument puedes poner un break point  junto donde lo asignas,  ejecuta to codigo y revisalo en tiempo de ejecución con una vista rapida.

    Cada TAG <> es un nodo. Que contiene atributos y puede tener nodos hijos. en tu caso hasta <DESCRIPCION GARANTIA > no nodos sencillos y la informacion es el "value". De alli son nodos con nodos hijos.

    namespace ICO_WSBanxico
    {
        public class Program
        {
            static void Main(string[] args)
            {
                string ID_Serie = "SF43718";
                CtrlerObtenerTipoCambio CtrlerObtenerTipoCambio = new CtrlerObtenerTipoCambio();
                //******************************************************************************************************************
                //******************************************************************************************************************
                //Información de billetes y monedas: 01-800-BANXICO (01 800 226 9426), o bien, escriba a:dinero@banxico.org.mx
                //WebProxy myProxy = new WebProxy("Proxysur", 80);
                //myProxy.Credentials = new NetworkCredential("Soporte01", "Soporte2011");
                WebProxy myProxy = new WebProxy("10.87.4.5", 80);//WebProxy myProxy = new WebProxy("Proxysur", 80);
                myProxy.Credentials = new NetworkCredential("USUARIO", "PASSWORD", "DOMINIO");
                //******************************************************************************************************************
                //******************************************************************************************************************
                HttpWebRequest httpBanxico = (HttpWebRequest)WebRequest.Create("http://www.banxico.org.mx/DgieWSWeb/DgieWS?WSDL");
                httpBanxico.Proxy = myProxy;
                httpBanxico.Credentials = myProxy.Credentials;
                WebRequest.DefaultWebProxy = httpBanxico.Proxy;
    
                DgieWSPortClient TipoCambio = new DgieWSPortClient();
                string strTipoCambio = "";
                strTipoCambio = TipoCambio.tiposDeCambioBanxico();
    
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(strTipoCambio);
    
                XmlNodeList xmlDataset = xmlDoc.GetElementsByTagName("bm:Series");
                string fechaXML = "";
                EntTipoCambio TC = null;
                foreach (XmlNode Nodo in xmlDataset)
                {
                    if (Nodo.Attributes.Item(1).Value == ID_Serie)
                    {
                        fechaXML += Nodo.ChildNodes.Item(0).Attributes.Item(0).Value;
                        TC = new EntTipoCambio();
                        TC.Fecha = CtrlerObtenerTipoCambio.FechaSistema(); //DateTime.Parse(fechaXML.Substring(8, 2) + "/" + fechaXML.Substring(5, 2) + "/" + fechaXML.Substring(0, 4));
                        TC.Valor = double.Parse(Nodo.ChildNodes.Item(0).Attributes.Item(1).Value);
                        TC.Tipo = "D";
                    }
                }
    
                if (TC != null && TC.Fecha.Hour < 12)
                { CtrlerObtenerTipoCambio.Guardar(TC); }
            }
        }
    }


    • Editado aelp quarta-feira, 19 de fevereiro de 2020 22:27
    quarta-feira, 19 de fevereiro de 2020 22:25