使用nhibernate创建的数据库的域库。当我在库下创建web服务时,我遇到了许多关于无法在我的DataContract类中使用接口的错误。如参见
[DataContract]
public class MyClass
{
...
[DataMember]
public virtual IList<Item> Items {get;set;}
...
}
接下来,我决定添加一些策略:我添加了类型为List的其他属性:
[DataContract]
public class MyClass
{
...
[XmlIgnore]
public virtual IList<Item> prItems {get;set;}
[DataMember]
public virtual List<Item> Items {
get{
return this.prItems.ToList();
}
set{
this.prItems = value;
}
}
...
}
这项工作很好 - 我可以在我的客户端上获取列表,但是当我需要更改项目列表时 - 这在服务器上是空的,因为客户端对prItems一无所知。 你能为我建议什么?
答案 0 :(得分:2)
您不能使用使用NHibernate加载的类实例并且包含集合,因为NHibernate使用代理集合类进行延迟加载,而NHibernate集合代理类不可序列化。
构建您在Web服务界面中使用的单独DTO类。
答案 1 :(得分:0)
使用您的初始尝试,但使用其他属性:
[DataContract]
[KnownType(typeof(List<Item>))]
public class MyClass
{
...
[DataMember]
public virtual IList<Item> Items {get;set;}
...
}
更多信息:http://msdn.microsoft.com/en-us/library/ms730167.aspx
修改强>
将KnownType更新为完整的通用定义