none
Problema Deserializando IEnumerable<Object> y transformando en un Queryable. DataContractSerializer RRS feed

  • Pregunta

  • Buenas,

    Os cuento mi problema. Estoy intentando crear un Servicio Web WCF con Visual Studio 2010 y Framework 4.0 y me he encontrado con la siguiente problematica a la hora de realizar el orderBy. La llamada al servicio funciona correctamente y me deserializa de forma correcta también (tengo datos en el enumerado) pero a la hora de hacer el order by me da la siguiente excepcion:

    Referencia a objeto no establecida como instancia de un objeto.

    Source: Anonymously Hosted DynamicMethods Assembly

       en lambda_method(Closure , beAccion )
       en System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count)
       en System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)
       en System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
       en System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
       en System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

    Aquí os dejo el código que se ejecuta, a ver si alguien me puede echar una mano porque llevo dos días buscando por internet y no he encontrado ninguna solucion.


    string rString;
    rString = client.GetAccion(20);

    DataContractSerializer dcs = new DataContractSerializer(typeof(IEnumerable<beAccion>));
    MemoryStream ms = new MemoryStream();
    ms = new MemoryStream(Encoding.UTF8.GetBytes(rString));
    var varQuery = (IEnumerable<beAccion>)dcs.ReadObject(ms);

    List<beAccion> lista = new List<beAccion>();


    if (varQuery != null)
    {
           var query = varQuery.AsQueryable<beAccion>();
           lista = (List<beAccion>)query.OrderBy(a => a.FechaFin).ToList();

    }

     

     

    Un saludo y muchas gracias.


    lunes, 8 de agosto de 2011 10:09

Todas las respuestas

  • hola

    pero porque defines para desserializar un IEnumerable<beAccion>  y no un List<beAccion> ?

    si la lista que veo usas debajo es un List<>


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 8 de agosto de 2011 18:41
  • Mucha gracias, ahora mismo lo pruebo y te comento.
    martes, 9 de agosto de 2011 6:18
  • Pues resulta que el problema no es ese, definiendolo como lista sigue obteniendo el mismo error. Al parecer la lista de nodos y diccionarios del queryable no contiene nada, no se si es que en la serializacion esta información se pierde.

     

    martes, 9 de agosto de 2011 6:34
  • Solo por probar David,

    Podrías modificar esto: DataContractSerializer dcs = new DataContractSerializer(typeof(IEnumerable<beAccion>));

    por: DataContractSerializer dcs = new DataContractSerializer(typeof(beAccion));

    Saludos


    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras
    martes, 9 de agosto de 2011 6:38
  • Ahora mismo lo pruebo, aunque no he hecho la prueba antes creo que al datacontract hay que indicarle el objeto o coleccion de objeto que va a contener, por eso se le especifica en Enumerable. Esto ya lo he hecho en otros casos y funciona correctamente, al parecer el problema reside mas en el queryable. Ahora pruebo y te confirmo. Muchas gracias de antemano.
    martes, 9 de agosto de 2011 6:56
  • En efecto, como comentaba no es posible definir un datacontract con un tipo que no sea list o iEnumerable ya que lo que el servicio WCF le pasa serializado es un conjunto de objetos (List o IEnumerable). Sigo pensando que la deserialización se deja algo por el camino...

     

    martes, 9 de agosto de 2011 7:09
  • Umh, podrías subir el proyecto a algun sitio para darle un vistazo?
    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras
    martes, 9 de agosto de 2011 7:11
  • Por temas de LPOD no es posible subir el proyecto, solo puedo facilitarte información acerca de los errores que me reporta y las excepciones. Hay una lista de nodos que veo que no se serializan al devolver la llamada al WCF y al aplicar el orderBy el lambda lanza un error como que no ha encontrado esa información, a lo mejor no es posible ejecutar querys sobre una lista deserializada. No lo se, he empezado hace poco con este tema y es el unico sitio donde he encontrado problemas. Gracias por tu interes.
    martes, 9 de agosto de 2011 7:19