J4N*_*J4N 4 .net serialization entity-framework circular-reference javascriptserializer
我正在使用ASP.NET MVC 3的库(Telerik).
我的所有功能都有问题,需要通过AJAX返回一些数据:
我正在使用EF4来连接我的数据库,而且我(并且需要)两种方式的导航属性(想象一下,有一些帖子和一个帖子的用户都有用户).
问题是该库正在使用JavaScriptSerializer,它使用JSON对数据进行编码.
我得到的错误
序列化"System.Data.Entity.DynamicProxies.Employee_34048F4F6A98297F826C798A27640C7383E95E8EA8282EC8A5F738FA0C77CBC3"类型的对象时检测到循环引用."
异常,这是正确的,因为父级引用了它的子级,而子级引用了它的父级.
我已经找到了一些解决方法,但没有什么能完全满足我:
我和WCF几乎有同样的问题,我创建了一个知道处理循环引用的序列化,我们可以在这里做同样的事吗?或者有办法管理这个吗?
如果没有,我想最好的方法是使用"ViewModel",但有没有办法加速这些创作?像一个泛型对象,它接受构造函数EF对象并删除循环引用?还要别的吗?
非常感谢你
事实上,而不是[NonSerialized],这是[ScriptIgnore]你需要.我会从两个角度中的一个角度来看待这个:
使用RegisterConverters和编写自定义转换器指定的所有属性,除了家长(在此也可能过于自动化,也许使用像一个定制的类级属性[SkipSerialize("Parent")]的增加partial class-这可能是过于复杂的事情,虽然).
简单地说:不要序列化EF POCO,而是使用DTO - 听起来这就是你在ViewModel答案中的意思.就个人而言,我没有问题,有一个类的"实体"(EF/POCO)版本和一个非常相似但不同的DTO版本 - 他们的意图是不同的,在我看来它并没有违反DRY.