【发布时间】:2011-08-11 08:28:16
【问题描述】:
我有一个 Reason 对象:
public class Reason
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
public virtual Company Company {get;set;}
}
我正在使用实体框架 4,Company 是 Company 的导航属性。
我还使用网络服务将数据返回给客户端。
我有返回原因的网络方法:
[WebMethod]
public Reason[] GetCallReasons()
{
IReasonRepository rep =
ObjectFactory.GetInstance<IReasonRepository>();
return rep.GetReasonsList().ToArray();
}
由于 ef4,我在执行 web 方法时遇到以下异常:
A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.Reason_24A0E4BBE02EE6BC2CF30BB56CFCB670C7D9D96D03D40AF4D174B89C9D3C5537'
出现问题是因为 ef4 添加了无法序列化的属性:
为了解决这个问题并消除错误,我可以通过不将其设为虚拟或删除导航属性来禁用导航属性。但我需要它并想使用延迟加载功能。
我也可以为 Reason 编写特定的序列化程序,但我有很多类,我在我的 Web 服务中使用了很多类,并且为所有这些类编写一个序列化程序是很多工作。
我该如何解决这个异常?..
【问题讨论】:
标签: c# .net web-services entity-framework serialization