EF5,从Proxy类型中提取POCO,并将响应序列化为Json



我一直在做研究,这个问题看起来以前有人回答过,但并不完全符合我的需求。简而言之,我使用的是EF5,带有延迟加载,从数据库返回的对象都是代理类型,我的WCF web服务需要以json格式通过rest返回它们。在知道代理类型无法序列化后,我尝试在响应之前使用ApplyDataContractResolverAttribute+ProxyDataContractSolutionr将代理类型转换回POCO类型。不幸的是,在添加了ProxyDataContractResolver之后,DataContractSerializer仍在尝试序列化代理类型,并给了我序列化异常。许多在线解决方案涉及关闭延迟加载或关闭的ProxyCreationEnabled

我的第一个问题是:它是否存在一个解决方案,我仍然可以利用EF的延迟加载,并且仍然能够将POCO类型序列化为Json返回到我的客户端?

我的第二个问题是:对于我的情况,最好的做法应该是什么?

非常感谢您提前提供的帮助

最好的做法是配置模型并告知应该映射哪些属性。这样就不会出现数据过载的情况。使用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以防止溢出。

第二个问题。最简单的方法就是使用JSON.NET进行序列化。

我最终重新构建了EF数据模型(以避免循环),并放弃了使用延迟加载。

最新更新