【问题标题】:Serializing object with virtual properties using another lighter object使用另一个更轻的对象序列化具有虚拟属性的对象
【发布时间】:2012-10-30 09:59:47
【问题描述】:

我有一个类有很多延迟加载的虚拟属性

public class TestPlan
{
    public virtual ICollection<Test> Test { get; set; }
    public virtual Commercial Commercial { get; set; }
    ...
}

并且这个类必须在程序的后面进行序列化。问题是,由于这些属性是虚拟的,我每次尝试序列化它时都会遇到错误(循环引用)。 这是我的问题

我的老板告诉我使用他所谓的 View Object,它是同一个对象,但没有未使用的属性。 你怎么看这个?我应该将那些未使用的属性设置为 null 吗?

背景

序列化对象旨在用于基础架构网格(一个不错的数组)。我已经尝试在我的虚拟设备上使用 [ScriptIgnore] 属性,但没有成功。

我还尝试将我的 TestPlans 检索为 database.TestPlans.AsNoTracking().ToList(),但出现错误(当使用 NoTracking 合并选项返回对象时,只有在 EntityCollection 或 EntityReference 不包含对象时才能调用 Load。)

提前致谢

【问题讨论】:

  • 这种对象可以称为 ViewModel 或 DTO,具体取决于其用途。
  • 用这个打败我,我必须打字更快;)
  • @MattDavey 我将使用 DTO,谢谢

标签: c# asp.net-mvc-3 entity-framework serialization


【解决方案1】:

如果您的 Boss 指的是带有 View Object 的 DataTransferObject,那么他似乎正朝着正确的方向前进。 这有时也称为 ASP 中的 ViewModel 对象。 这只是一个简单的 POCO,表示模型对象的扁平化版本(有些使用 AutoMapper 进行扁平化)

您不应修改模型对象,而应创建一个新对象(可能是扁平化的)以用于序列化。这个对象没有行为,只有数据,代表了序列化的契约。

我在您的示例代码中看不到循环引用,但如果您愿意,我可以给您一个不相关的代码示例,展示如何通过展平解决循环引用。 (不知道型号很难)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 2011-05-19
相关资源
最近更新 更多