我一直在做研究,这个问题看起来像是在回答,但不完全符合我的需要。简而言之,我使用EF5,延迟加载,从数据库返回的对象都是代理类型,我的WCF Web服务需要以json格式返回它们。在知道无法序列化代理类型之后,我尝试使用ApplyDataContractResolverAttribute + ProxyDataContractResolver在响应之前将代理类型转换回POCO类型。不幸的是,在添加ProxyDataContractResolver之后,DataContractSerializer仍在尝试序列化代理类型并给我序列化异常。许多在线解决方案涉及关闭延迟加载或关闭ProxyCreationEnabled
我的第一个问题是:它是否存在一个解决方案,我仍然可以利用EF的延迟加载,并且仍能将POCO类型作为Json序列化回我的客户端?
我的第二个问题是:对于我的情况,最佳做法应该是什么?
非常感谢您的帮助
答案 0 :(得分:0)
最好的办法是配置模型并告知应映射哪些属性。像这样,不会有数据过载。 使用ScriptIgnore属性应该有效。
示例:
[Serialize]
public class Person{
public int ID {get;set;}
public virtual List<Role> Roles {get;set;}
//other properties
}
[Serialize]
public class Role{
public int ID {get;set;}
[ScriptIgnore]
public virtual List<Person> PersonsInRole {get;set;}
//other properties
}
在示例中,将映射用户的角色,但不会序列化导航属性PersonsInRole of Role以防止溢出。
关于第二个问题。最简单的方法就是使用JSON.NET来序列化。
答案 1 :(得分:0)
我最终重构了我的EF数据模型(以避免循环)并放弃使用延迟加载。