具有只读属性的WCF DataContract

Asa*_*f R 18 .net wcf .net-4.0 datacontract

我正在尝试从WCF中的服务方法返回一个复杂类型.我正在使用C#和.NET 4.这种复杂类型意味着不变(与.net字符串相同).此外,服务只返回它,并且从不接收它作为参数.

如果我尝试仅在属性上定义getter,则会出现运行时错误.我想这是因为没有setter导致序列化失败.不过,我认为这种类型应该是不变的.

例:

[DataContract]
class A 
{
   [DataMember]
   int ReadOnlyProperty {get; private set;}
}
Run Code Online (Sandbox Code Playgroud)

由于序列化问题,服务无法加载.

有没有办法在WCF DataContract上创建只读属性?也许通过更换序列化器?如果是这样,怎么样?如果没有,你会对这个问题提出什么建议?

谢谢,
阿萨夫

Krz*_*mic 16

穿上后[DataMember]场,你不需要一个二传手.

  • 它永远不会只读.通过线路传输的Datacontract只是一个XML.你不能只读取一段XML.你不能**使**在电线另一端的人不改变它的价值.它只是不起作用. (5认同)

小智 9

让你的setter公开以满足序列化程序,但只是不对setter做任何事情.不是'纯粹',而是完成它

public string MyProperty 
{
    get {
        return this._myProperty
    }
    set {}
}
Run Code Online (Sandbox Code Playgroud)


Str*_*nye 5

DataMember字段不能为只读,因为wcf不会按原样序列化对象,并且每次反序列化开始之前,都会使用默认构造函数创建新的对象实例。分派器在反序列化之后使用设置器来设置字段值。

但是所有上面的文字可能是一个大错误:)

为使它们真正成为只读,请使服务器逻辑验证此字段值。