假设:
问题:
我收到如下错误:
无法序列化成员 [namespace]。[entity]。[property] of 类型 Iesi.Collections.Generic.ISet`1 [命名空间]。[实体] [assembly],版本= 1.0.0.0, Culture = neutral,PublicKeyToken = null]] 因为它是一个界面。
您必须实现默认访问者 上 Iesi.Collections.Generic.HashedSet`1 [命名空间]。[实体] [部件], 版本= 1.0.0.0,文化=中立, PublicKeyToken = null]]因为它 继承自ICollection。
我的问题:
作为旁注,我试着谷歌寻求帮助 - 我认为这不是一个新问题。
答案 0 :(得分:12)
NHibernate序列化has been treated a lot on stackoverflow。参见:
底线:使用DTO。
答案 1 :(得分:1)
请尝试使用DataContractSerializer。它更具限制性,但会更多序列化。
Dan Rigsby explains the difference between XMLSerializer and DataContractSerializer
以下是stackoverflow上我的一篇帖子中的示例:
public XDocument GetProductXML(Product product)
{
var serializer = new DataContractSerializer(typeof(Product));
var document = new XDocument();
using (var writer = document.CreateWriter())
{
serializer.WriteObject(writer, product);
writer.Close();
}
return document;
}
答案 2 :(得分:1)
您永远不能XML序列化接口 - 只是实现接口的具体类。
答案 3 :(得分:0)
1)从映射文件
加载Dozer bean映射器DozerBeanMapper dtoMapper = new DozerBeanMapper(Arrays.asList(new String[]{dozerMappingfile}));
2)将每个对象转换为正常对象,删除persistentbag相关细节
List<MyEjb> lstProfilehib = //hibernate loaded objects
List<MyEjb> lstProfile = new ArrayList<MyEjb>();
for(MyEjb sp: lstProfilehib){
lstProfile.add( dtoMapper.map(sp, MyEjb.class));
}