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