Chr*_*los 5 c# nhibernate xml-serialization workflow-foundation
我正在尝试构建一个看起来像这样的对象:
public class MyObject
{
private IList<AnotherObject> items;
public List<AnotherObject> Items
{
return items.AsEnumerable().ToList<AnotherObject>();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用NHibernate作为我的DAL并将其直接映射到items字段,所有这些都可以正常工作.
我也使用Windows Workflow,复制器活动不适用于通用IList.(http://social.msdn.microsoft.com/Forums/en-US/windowsworkflowfoundation/thread/2ca74b60-fd33-4031-be4b-17a79e9afe63)这基本上迫使我使用List <>包装而不是IList < >.这当然打破了直接的NHibernate映射,因为NHibernate的IList实现不能直接转换为List.
**编辑:Windows Workflow要求实际上意味着我将失去对列表的类型安全访问,无论它需要IList.
现在的目标是序列化/反序列化此对象.这适用于二进制序列化,但当我尝试反序列化时,底层的NHibernate代理对象会出现nhibernate错误.
所以我尝试了xml序列化.序列化工作正常,并在序列化的xml文件中给出了我很好的具体类定义,它完全剥离了nhibernate代理.但是,当尝试反序列化时,我无法将项目添加到列表中作为items.AsEnumerable.ToList调用将不允许项目通过.Add方法添加到基础列表.
有没有人对此有任何想法?我是以错误的方式来做这件事的吗?
**编辑:NHibernate具体类是NHibernate.Collection.Generic.PersistentGenericBag确实直接实现IList.但是,我失去了通用列表的所有类型安全的好处.这让我回到必须为每个子对象编写包装器的领域,如果可能的话我真的想避免这种情况.
一个选项是创建您自己的 CustomList 实现,它是实现 IList 的实例的包装器
IE:
public CustomList<AnotherObject> Items
{
return new CustomList<AnotherObject>(items);
}
Run Code Online (Sandbox Code Playgroud)
即当您添加到您的时,CustomList<T>它会添加到支持列表中。
听起来只要你的班级实现得IList和IList<T>你一样好就可以了。
| 归档时间: |
|
| 查看次数: |
1687 次 |
| 最近记录: |