Tra*_*s J 6 c# serialization dynamic-proxy entity-framework-4.1 asp.net-mvc-3
我正在尝试序列化域模型并遇到一个需要将动态代理转换为POCO的问题.我遇到的问题是通过模型中的虚拟属性存在循环引用.虽然我试图使用[ScriptIgnore]序列化程序不解析这些属性,但它仍然可以.我相信这是因为对象是动态代理,并且属性中仍然存在一些导致解析器进入的残余(这反过来导致递归错误"循环引用" - 我尝试将递归限制为3步但我得到了错误"超出递归步骤").
如何将对象从动态代理转换为POCO以便可以序列化?
编辑:简单的例子
public class One : BaseViewModel
{
public int OneId { get; set; }
public virtual ICollection<Two> Two { get; set; }
}
public class Two
{
public int TwoId { get; set; }
public int OneId { get; set; }
[ScriptIgnore]
public virtual One One { get; set; }
}
public abstract class BaseViewModel
{
public string AsJson()
{
var serializer = new JavaScriptSerializer();
return serializer.Serialize(this);
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个已知的问题
我们修复了 ScriptIgnoreAttribute 中的一个问题,该问题未传播到派生类。由于 POCO 代理类型是通过从用户提供的 POCO 类派生来创建的,因此 JavaScriptSerializer 无法看到重现中的 [ScriptIgnore] 属性。
该修复不会包含在 .NET 4.5 的下一个预览版本中。
(所以想必您必须等待后续预览版或最终版)
.NET 4.5 中已修复
从对该问题的评论来看,如果您使用的是当前版本的 JSON.Net,您似乎可以使用 NonSerializedAttribute 而不是 ScriptIgnoreAttribute 来解决