c# - 使用另一个更轻的对象序列化具有虚拟属性的对象

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

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

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 合并选项的对象时,只能在以下情况下调用 Load EntityCollection 或 EntityReference 不包含对象。)

提前致谢

最佳答案

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

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

我无法从您的示例代码中看到循环引用,但如果您需要,我可以为您提供一个不相关的代码示例,展示如何通过展平来解决循环引用。 (不知道型号很难做)

关于c# - 使用另一个更轻的对象序列化具有虚拟属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13136543/

相关文章:

c# - Entity Framework 代码首先多对多返回对象 null

database - Entity Framework 6 暂时禁用拦截

c# - COM互操作注册

c# - Html.HiddenFor 在 ASP.NET 中错误地格式化 DateTime

asp.net-mvc-3 - 自动向所有 [DataType(DataType.Date)] 字段添加 jquery 日期选择器

asp.net-mvc-3 - MVC3 下拉列表显示每个项目的多个属性

c# - LINQ 表达式未被转换为 SQL

c# - 在 C# 中向 USB 连接的 GPRS 调制解调器发送 AT 命令

c# - 显示随机网格 c#

c# - 在哪里可以找到 Roslyn 中不同符号种类下的符号类型?