Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 部分信任场景中DataContract中的集合_.net_Wcf_Serialization_Datacontract_Partial Trust - Fatal编程技术网

.net 部分信任场景中DataContract中的集合

.net 部分信任场景中DataContract中的集合,.net,wcf,serialization,datacontract,partial-trust,.net,Wcf,Serialization,Datacontract,Partial Trust,在设计用于序列化的数据契约时,有一点我很困惑 假设我有一个对象(例如客户),它公开了一个集合属性(例如AddressCollection命名地址)。框架设计指南规定,我不应该为属性公开一个公共mutator,即集合属性应该有一个get和no set,而是一个公共set方法(public void SetAddresses(IEnumerableaddresses)) 但是,如果我想序列化该对象,并且我预计我将处于部分信任环境中,那么我是否必须向属性添加公共setter,以便可以正确地反序列化它

在设计用于序列化的数据契约时,有一点我很困惑

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

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

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

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


多谢是的,这是经过尝试的,真正的面向对象思想与新工具相结合。:)我喜欢从一个角度来考虑它。我在尽可能接近mutator free的情况下设置了真正的业务对象,然后我使用了一组设计为序列化的DTO对象(公共属性、空白构造函数等)。这不是一个理想的解决方案,但我发现,如果尝试将非常丰富的对象集与序列化混合,它可能会变得丑陋。最好把它们分开