0

我有一系列具有DataContract属性的 EF POCO,以及除导航属性之外的DataMember所有属性的属性。

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

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

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

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

4

1 回答 1

1

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

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

一种常见的做法是使用 Automapper 或类似的子系统轻松地从 DTO 转换为 DTO。

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

于 2013-11-13T18:23:01.897 回答