我试图建立一个对象,它看起来是这样的:如何反序列化Enumerable.ToList <>()为List <>
public class MyObject
{
private IList<AnotherObject> items;
public List<AnotherObject> Items
{
return items.AsEnumerable().ToList<AnotherObject>();
}
}
我使用NHibernate作为我DAL和有它映射直接到项目字段和所有工作正常。
我也使用Windows工作流和复制器活动不能与通用IList一起使用。 (http://social.msdn.microsoft.com/Forums/en-US/windowsworkflowfoundation/thread/2ca74b60-fd33-4031-be4b-17a79e9afe63)这基本上迫使我使用列表<>包装,而不是IList <>。这当然会破坏直接的NHibernate映射,因为NHibernate的IList实现不能直接转换为List。
**编辑:Windows工作流需求实际上意味着我将失去对列表的类型安全访问,无论它如何需要IList。
现在我们的目标是序列化/反序列化这个对象。这适用于二进制序列化,但当我试图反序列化它们时,底层的NHibernate代理对象会爆炸出现nhibernate错误。
所以我尝试了xml序列化。序列化工作正常,并在序列化的xml文件中给出了我很好的具体类定义,它完全去除了nhibernate代理。但是,当试图反序列化这个时,我无法将项目添加到列表中,因为items.AsEnumerable.ToList调用不会让项目通过.Add方法添加到基础列表中。
有没有人对此有任何想法?我是否以这种错误的方式去做?
**编辑:NHibernate具体类是NHibernate.Collection.Generic.PersistentGenericBag确实实现IList直接。但是,我失去了通用列表的所有类型安全的好处。这使我不得不为每个子对象编写一个包装器,我真的想尽可能避免这种情况。
我正在考虑包装路线,但我并不想为我的领域模型中的每个子对象编写包装。那么泛型又有什么意义呢? :)我承认这可能是最后的解决方案。 – 2009-05-05 18:58:26