WCF:使用只读成员序列化复杂对象

时间:2009-11-09 18:23:08

标签: serialization

寻找有关WCF服务的一些指导我正在进行原型设计。

我在IIS中托管了一个WCF服务,它将数据传递给我的客户端。我有一个单独的共享程序集,其中包含我的WCF项目中引用的所有业务对象。

我希望这些业务对象中的一些属性只读,因为我不希望我的客户能够在其客户端代码中更改这些字段。

我读到使用[DataContract]属性的装饰类强制执行正确的序列化以维护只读字段,但是当我实现它时,客户端中生成的代理类显示为可写。

是否有任何技巧可以实现这一目标?

谢谢!

/埃里克

2 个答案:

答案 0 :(得分:1)

您可以使用常规属性,使用DataMember属性标记它们,并将set访问器设为私有:

        [DataMember]
        public object IsFoo
        {
            get
            {
               return _isFoo;
            }
            private set { }
        }

编辑:此外,要真正阻止您的类的用户设置该属性,您可以始终抛出InvalidOperation异常。

答案 1 :(得分:0)

根据我的经验,我发现WCF序列化程序只适用于非常简单的对象模型。如果您计划通过网络传递业务或域对象,则可能需要考虑在“传输”对象中创建支持。此对象将使您可以准确控制消费者正在接收的内容,并可以映射回您的域对象。