gpt4 book ai didi

c# - 序列化实体对象

转载 作者:行者123 更新时间:2023-11-30 23:28:07 25 4
gpt4 key购买 nike

这是我尝试序列化的对象:

public class EmailAttachment
{
public int ID { get; set; }
public string Filepath { get; set; }
public string Filename { get; set; }

public int EmailID { get; set; }

[IgnoreDataMember]
public virtual ReceivedEmail Email { get; set; }
}

这是我的序列化代码:

        var attachments = unitOfWork.EmailAttachmentRepository.Get(e => e.EmailID == emailID);
return Json(attachments, JsonRequestBehavior.AllowGet);

问题是,虽然我放置了 [IgnoreDataMember] 属性,但是 EmailAttachmentEmail 属性仍然是序列化的。我可以在控制台中看到实体日志,当首先获取附件时,没有获取 Email 因为启用了延迟加载但是当 return Json(attachments, JsonRequestBehavior.AllowGet); 然后对列表中的每个附件执行 Email 从数据库中获取,并在 Email 的属性上传播。

我怎样才能阻止它?我只想要没有其虚拟属性的 EmailAttachment...

最佳答案

您可以在创建上下文后禁用延迟加载,我建议修改您的 Get 方法以接受另一个 bool 以启用/禁用延迟加载:

var attachments = unitOfWork
.EmailAttachmentRepository.Get(e => e.EmailID == emailID, lazyloading: false);

然后你在哪里创建你的上下文:

using(var ctx = new MyContext())
{
ctx.Configuration.LazyLoadingEnabled = lazyloading; //false
...
}

关于c# - 序列化实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36151870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com