0

在设计用于序列化的 DataContracts 时,我一直很困惑。

假设我有一个对象(例如客户),它公开了一个集合属性(例如一个名为 Addresses 的 AddressCollection)。框架设计指南规定我不应该公开该属性的公共 mutator,即,集合属性应该有一个 get 和没有 set,而是一个公共 set 方法(public void SetAddresses(IEnumerable<Address>addresses))。

但是,如果我想序列化该对象,并且我预计我将处于部分信任环境中,我是否必须向该属性添加一个公共设置器以便它可以正确反序列化?

此外,如果集合在序列化时没有任何内容,并且由于 DataContractSerializer 没有调用默认构造函数,我很确定该集合根本没有设置并且保留为空。我可以使用 OnSerializing 属性来初始化集合,但是在部分信任的情况下,方法也必须是公共的,不是吗?这更难看。

有谁知道这里的适当指导?

非常感谢。

4

2 回答 2

1

是的,它已经过尝试,真正的 OO 思维遇到了新工具。:) 我喜欢从DTO 模式的角度来考虑它。我将我的真正业务对象设置为尽可能接近无变异器,然后我使用一组设计为可序列化的 DTO 对象(公共属性、空白构造函数等)。这不是一个理想的解决方案,但我有发现如果你尝试将非常丰富的对象集与序列化混合,它会变得很难看。最好把它们分开。

于 2009-04-14T00:50:27.950 回答
0

如果您真的想保护您的域模型,您可能需要考虑将一些数据传输对象添加到您的解决方案中。这样你就可以序列化你需要的东西并在内部操作域。

于 2009-04-14T00:32:58.880 回答