Entity Framework 的导航属性怎么序列化?

winner2050 2012-08-20 03:11:33
Entity Framework 的导航属性怎么序列化?

我记得以前写的程序是正确的,今天发现出错了,也不知道什么时候开始出错的。

一个投票主题的实体类,里面包含了投票选择的实体类集合。

原先意图是一次就能返回需要的主从表数据。

有些地方要用ajax 加载界面,把实体类序列化的时候报告,重复引用

using (Entities db = new Entities())
{
var q = from x in db.TopWinCMS_Vote.Include("VoteChoiceInfo")
where x.ID == id && x.Pass == 1
select x;
return q.FirstOrDefault();
}


[DataContractAttribute]
public partial class VoteInfo
{
public VoteInfo()
{
this.VoteChoiceInfo = new HashSet<VoteChoiceInfo>();
}

[DataMember]
public int ID { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public int Pass { get; set; }
[DataMember]
public System.DateTime CheckInTime { get; set; }
[DataMember]
public int VoteType { get; set; }
[DataMember]
public string PicUrl { get; set; }
[DataMember]
public System.DateTime EndData { get; set; }
[DataMember]
public string windowsize { get; set; }
[DataMember]
public string TemplateFileName { get; set; }
[DataMember]
public int LimitIP { get; set; }

[DataMember]
public ICollection<VoteChoiceInfo> VoteChoiceInfo { get; set; }
}



 [DataContractAttribute]
public partial class VoteChoiceInfo
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string ChoiceTitle { get; set; }
[DataMember]
public int VoteNum { get; set; }
[DataMember]
public string PicUrl { get; set; }
[DataMember]
public int IsDefault { get; set; }
[DataMember]
public int VoteID { get; set; }
[DataMember]
public int OrderID { get; set; }

[DataMember]
public virtual VoteInfo VoteInfo { get; set; }
}


由此可见 VoteInfo 里面包含VoteChoiceInfo ,VoteChoiceInfo 里面包含VoteInfo 。
经断点可以看到,查询出来的实体类是无限递归下去。

序列化的时候报
““TopWinCMS.Model.VoteChoiceInfo”类型的对象图包含循环,如果禁用引用跟踪,择无法对其进行序列化。”
...全文
418 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 版主 2012-08-21
  • 打赏
  • 举报
回复
怎么不按引用传递
[DataContract(IsReference = true)]
winner2050 2012-08-20
  • 打赏
  • 举报
回复
靠,看错了,我是去掉
把子类里面的引用父类的,可序列化的标识
winner2050 2012-08-20
  • 打赏
  • 举报
回复
现在是临时解决问题。

把子类里面的引用父类的属性设置为私有。

这样避免序列化的时候父子,子父,父子循环引用。

因为实体类是由entity 生成的,下次修改模型还得被覆盖修改过的代码。
winner2050 2012-08-20
  • 打赏
  • 举报
回复
序列化成xml 已经搞定了。
DataContractSerializer serializer = new DataContractSerializer(typeof(T), typeof(T).Name, string.Empty, null, int.MaxValue, false, true, null, null);

序列化成json还没弄好

DataContractJsonSerializer没类似选项
蒋晟 版主 2012-08-20
  • 打赏
  • 举报
回复
用什么序列化的?DataContractSerializer 的话构造的时候把preserveObjectReferences设置为true
参考http://blogs.msdn.com/b/sowmy/archive/2006/03/26/561188.aspx

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧