使用另一个较轻的对象使用虚拟属性序列化对象

时间:2012-10-30 09:59:47

标签: 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还是什么?

背景

序列化对象旨在用于infragistics网格(一个很好的数组)。我已经尝试在我的虚拟机上使用[ScriptIgnore]属性,但它没有用。

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

提前致谢

1 个答案:

答案 0 :(得分:1)

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

您不应修改模型对象,而是创建一个新对象(可能是扁平化的)以进行序列化。此对象不仅仅是数据行为,而是表示序列化的合同。

我无法从您的示例代码中看到循环引用,但如果您需要,我可能会给您一个不相关的代码示例,该示例演示如何通过展平来解析循环引用。 (很难不知道模型)