我試圖建立一個對象,它看起來是這樣的:如何反序列化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