Estoy tratando de construir un objeto que se ve algo como esto:Cómo deserializar Enumerable.ToList <>() a la lista <>
public class MyObject
{
private IList<AnotherObject> items;
public List<AnotherObject> Items
{
return items.AsEnumerable().ToList<AnotherObject>();
}
}
estoy usando NHibernate como mi DAL y hacer que la cartografía directamente al campo de elementos y todo lo que funciona bien.
También estoy usando Windows Workflow y la actividad del replicador no funciona con el IList genérico. (http://social.msdn.microsoft.com/Forums/en-US/windowsworkflowfoundation/thread/2ca74b60-fd33-4031-be4b-17a79e9afe63) Esto básicamente me obliga a utilizar el contenedor List <> en lugar del IList <>. Esto, por supuesto, rompe el mapeo directo de NHibernate ya que la implementación IList de NHibernate no se puede convertir directamente en una Lista.
** EDITAR: El requisito de Windows Workflow en realidad significa que voy a perder el acceso de tipo seguro a la lista, sin importar lo que requiera un IList.
Ahora el objetivo es serializar/deserializar este objeto. Esto funciona bien con la serialización binaria, pero los objetos subyacentes de NHibernate explotan con los errores de nhibernate cuando intento deserializarlos.
Así que probé la serialización xml. La serialización funciona bien y me da mis buenas definiciones de clase concretas en el archivo xml serializado que elimina por completo los proxies nhibernate. Sin embargo, cuando intento deserializar esto, no puedo agregar los elementos a la lista como la llamada items.AsEnumerable.ToList no permitirá que los elementos se agreguen a la lista subyacente a través del método .Add.
¿Alguien tiene alguna idea al respecto? ¿Voy por esto de la manera incorrecta?
** EDITAR: La clase de hormigón NHibernate es NHibernate.Collection.Generic.PersistentGenericBag que sí implementa IList directamente. Sin embargo, perdí todos los beneficios de tipo seguro de la lista genérica. Esto me devuelve al reino de tener que escribir un contenedor para cada objeto hijo y realmente quería evitar eso si es posible.
Estoy contemplando la ruta envoltorio, pero realmente no quiero tener que escribir un contenedor para cada objeto hijo en mi modelo de dominio. ¿Cuál es el punto de los genéricos entonces? :) Sin embargo, admitiré que esta es probablemente una solución de último recurso. –
La solución actual que estoy trabajando tiene una clase de contenedor que implementa tanto IList y IList. Los métodos no genéricos se han escrito para hacer la verificación de tipos. Pero básicamente solo envuelve un IList interno . –