我有一系列具有 DataContract
属性的EF POCO,以及 DataMember attributes 用于所有属性 except for the navigation properties .
这样,当我为WCF序列化对象时,只序列化了所需的属性,而忽略了导航属性 .
如果我尝试在ViewState中存储其中一个对象,我会得到该对象不可序列化的错误 . 但是,如果我将 Serializable
属性添加到对象,序列化程序也会尝试序列化所有导航属性,这反过来要求它们也被标记为可序列化 .
有没有办法强制 ViewState
( StateBag
)使用 DataContract
属性?是否可以自定义或替换 ViewState
序列化?
如果不可能,我是否必须使用 Selializable
属性用于类,而 NotSerialized
用于所有导航属性还是有更好的解决方案?
1 回答
有一个更好的解决方案 - 不要混合域 . 当您为WCF序列化对象时,您正在进入另一个域 - 数据传输对象的域,简称DTO .
DTO与您的持久对象是分开的,它们没有复杂的导航属性,而是包含客户端所需的唯一数据 .
commin的做法是使用Automapper或类似的子系统轻松转换/到DTO .
http://en.wikipedia.org/wiki/Data_transfer_object