serialize serializar objetos objects lista c# .net web-services .net-3.5 ibatis.net

c# - objetos - ¿Cómo serializar un IList<T>?



list string serialize c# (3)

Tengo un asignador OR (iBatis.Net) que devuelve un IList.

// IList<T> QueryForList<T>(string statementName, object parameterObject); var data = mapper.QueryForList<Something>(statement, parameters);

Estoy tratando de usarlo en un servicio web y quiero devolver los datos 1: 1. Por supuesto, no puedo devolver IList en un WebMethod porque es una interfaz y, por lo tanto, no se puede serializar.

Descubrí que el mapeador realmente está devolviendo una Lista. Pero me da miedo lanzarlo a List porque, por supuesto, el funcionamiento interno de los mapeadores podría cambiar en versiones futuras (y se siente sucio).

Entonces debería ...

a) return new List<Something>(data); b) return (List<Something>)data; c) // your solution here

¡Muchas gracias!


¿Por qué debería serializar IList? Simplemente utilícelo como fuente para su propia colección y serialícela:

var data = mapper.QueryForList<T>(statement, parameters); var yourList = new List<T>(data); //Serialize yourList here ))


No creo que necesites ac). Debería ser bastante seguro usar la solución a).

Esta solución depende de la API pública de IBatis.net. Las buenas API no cambian su API pública a menos que sea realmente la única solución para un problema de misión crítica

Espero que esto ayude.


Si realmente es una List<T> pero desea protegerse contra el cambio y hacer que funcione, la solución más efectiva será intentar convertirlo en una lista, y si eso falla, cree una nueva lista a partir de su contenido. , p.ej

var data = mapper.QueryForList<T>(statement, parameters); var list = data as List<T> ?? new List<T>(data);

Sin embargo, mencionas que no puedes devolver una interfaz porque es un servicio web. Esto puede haber sido cierto con ASMX y la clase XmlSerializer , pero si crea el servicio web utilizando WCF y utiliza DataContractSerializer , con suerte serializará las interfaces de recopilación (tanto como entradas como salidas del servicio). ¡Ese tipo de cambio puede ser algo más grande de lo que estás buscando!