使用EF POCO的DataContract / DataMember属性序列化到ASP.NET ViewState

时间:2013-11-13 17:18:53

标签: asp.net entity-framework serialization webforms poco

我有一系列EF POCO,其中包含DataContract个属性, DataMember属性适用于所有属性,除了导航属性

这样,当我为WCF序列化对象时,只序列化了所需的属性,而忽略了导航属性。

如果我尝试在ViewState中存储其中一个对象,我会收到该对象不可序列化的错误。但是,如果我将Serializable属性添加到对象,序列化程序也会尝试序列化所有导航属性,这反过来要求它们也被标记为可序列化。

有没有办法强制ViewStateStateBag)使用DataContract属性?是否可以自定义或替换ViewState序列化?

如果不可能,我是否必须使用类的Selializable属性和所有导航属性的NotSerialized,还是有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

有一个更好的解决方案 - 不要混合域名。当您为WCF序列化对象时,您正在进入另一个域 - 数据传输对象的域,简称DTO。

DTO与您的持久对象是分开的,它们没有复杂的导航属性,而是包含客户端所需的唯一数据。

commin的做法是使用Automapper或类似的子系统轻松地从/转换为DTO。

http://en.wikipedia.org/wiki/Data_transfer_object