none
Lista siempre se retorna vacia RRS feed

  • Pregunta

  • Hola,

     estoy parseando una xml 

    <ArrayOfIHistoryAuditCount xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/FrekuencyApi.Models">
        <IHistoryAuditCount>
            <Total>43</Total>
            <historyAuditList>
                <IAudit>
                    <Pk_id>36</Pk_id>
                    <date>11/1/2016 12:00:00 AM</date>
                    <id>33133</id>
                    <operation>Create</operation>
                    <userName>felipee</userName>
                </IAudit>
     </historyAuditList>
        </IHistoryAuditCount>
    </ArrayOfIHistoryAuditCount>

    Este es el codigo que parsea pero siempre retorna vacia 

    public static IList<IAudit> Parse(string xml)
           {
    
               try
               {
    
                       IList<IAudit> ListHistoryAudit = new List<IAudit>();
                       //  xml = xml.Replace("\"\"", "\"&quot;");
                       xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + xml ;
                       XDocument doc =  XDocument.Parse(xml);
    
    
                       ListHistoryAudit = (from elem in doc.Descendants("IAudit").Elements()
                                      select new IAudit
                                      {
                                          Pk_id = elem.Element("Pk_id").Value,
                                          userName = elem.Element("userName").Value,
                                          id = elem.Element("id").Value,
                                          operation = elem.Element("operation").Value,
                                          date = elem.Element("date").Value
                                      }).ToList();
    
    
                       return ListHistoryAudit;
    
               }
               catch (Exception ex)
               {
    
                   List<IAudit> listerror = new List<IAudit>();
    
                   return listerror;
    
               }
    
           }

    Ayuda


    Felipe Hurtado Developer

    miércoles, 2 de noviembre de 2016 16:04

Respuestas

  • Ya funciona me faltaba un ns  aqui dejo el codigo

           public static IList<IAudit> Parse(string xml)
           {
    
               try
               {
    
                       List<IAudit> ListHistoryAudit = new List<IAudit>();
                       //  xml = xml.Replace("\"\"", "\"&quot;");
                       xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + xml ;
                       XDocument doc =  XDocument.Parse(xml);
                       XNamespace ns = "http://schemas.datacontract.org/2004/07/FrekuencyApi.Models";
                       ListHistoryAudit = (from elem in doc.Descendants(ns+ "IAudit")
                                      select new IAudit
                                      {
                                          Pk_id = (string)elem.Element(ns + "Pk_id"),
                                          userName = (string)elem.Element(ns +"userName"),
                                          id = (string)elem.Element(ns+ "id").Value,
                                          operation = (string)elem.Element(ns+"operation"),
                                          date = (string)elem.Element(ns+"date")
                                      }).ToList();
    
    
                       return ListHistoryAudit;
    
               }
             catch (Exception ex)
               {
    
                   List<IAudit> listerror = new List<IAudit>();
    
                   return listerror;
    
               }
    Gracias 


    Felipe Hurtado Developer


    miércoles, 2 de noviembre de 2016 18:39

Todas las respuestas

  • hola

    es un problema de namespace

    XNamespace ns  = "http://schemas.datacontract.org/2004/07/FrekuencyApi.Models";
    XDocument  doc =  XDocument.Parse(xml);


    var ListHistoryAudit = (from elem in doc.Descendants(ns + "IAudit")
                  select new IAudit()
                  {
                      Pk_id = elem.Element(ns + "Pk_id").Value,
                      userName = elem.Element(ns + "userName").Value,
                      id = elem.Element(ns + "id").Value,
                      operation = elem.Element(ns + "operation").Value,
                      date = elem.Element(ns + "date").Value
                  }).ToList();

    Nota: no definas una clase con el prefijo "I" porque esta se usa para las interface

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 2 de noviembre de 2016 16:57
  • Hola leandro sigue dejando la lista vacia 

    XNamespace ns  

    no sirvio 


    Felipe Hurtado Developer

    miércoles, 2 de noviembre de 2016 18:33
  • Ya funciona me faltaba un ns  aqui dejo el codigo

           public static IList<IAudit> Parse(string xml)
           {
    
               try
               {
    
                       List<IAudit> ListHistoryAudit = new List<IAudit>();
                       //  xml = xml.Replace("\"\"", "\"&quot;");
                       xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + xml ;
                       XDocument doc =  XDocument.Parse(xml);
                       XNamespace ns = "http://schemas.datacontract.org/2004/07/FrekuencyApi.Models";
                       ListHistoryAudit = (from elem in doc.Descendants(ns+ "IAudit")
                                      select new IAudit
                                      {
                                          Pk_id = (string)elem.Element(ns + "Pk_id"),
                                          userName = (string)elem.Element(ns +"userName"),
                                          id = (string)elem.Element(ns+ "id").Value,
                                          operation = (string)elem.Element(ns+"operation"),
                                          date = (string)elem.Element(ns+"date")
                                      }).ToList();
    
    
                       return ListHistoryAudit;
    
               }
             catch (Exception ex)
               {
    
                   List<IAudit> listerror = new List<IAudit>();
    
                   return listerror;
    
               }
    Gracias 


    Felipe Hurtado Developer


    miércoles, 2 de noviembre de 2016 18:39