部分信任方案中DataContracts中的集合

时间:2009-04-12 19:56:45

标签: .net wcf serialization datacontract partial-trust

我对DataContracts的序列化设计中的一点非常困惑。

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

但是,如果我想序列化该对象,并且我预计我将处于部分信任环境中,那么我向该属性添加公共setter,以便可以正确地反序列化?

此外,如果集合在序列化中没有任何内容,并且由于DataContractSerializer没有调用默认构造函数,我很确定集合根本没有设置并保留为null。我可以使用OnSerializing属性初始化集合,但是 方法也必须在部分信任场景中公开,不是吗?这甚至更加丑陋。

有人知道这里适当的指导吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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