我试图从 WCF 中的服务方法返回一个复杂类型。我正在使用 C# 和 .NET 4。这种复杂类型是不变的(与 .net 字符串相同)。此外,服务只返回它,而不会将它作为参数接收。
如果我尝试仅在属性上定义 getter,则会出现运行时错误。我猜这是因为没有 setter 会导致序列化失败。不过,我认为这种类型应该是不变的。
例子:
[DataContract]
class A
{
[DataMember]
int ReadOnlyProperty {get; private set;}
}
由于序列化问题,服务无法加载。
有没有办法在 WCF DataContract 上创建只读属性?也许通过更换序列化程序?如果是这样,怎么做?如果不是,您对这个问题有什么建议?
谢谢,
阿萨夫
最佳答案
DataMember 字段不能是只读的,因为 wcf 不会按原样序列化对象,并且每次反序列化开始之前都会使用默认构造函数创建新的对象实例。调度程序在反序列化后使用 setter 设置字段值。
但是所有大写的文字都可能是一个大错误:)
要使它们真正只读,请制作服务器逻辑,验证此字段值。
关于.net - 具有只读属性的 WCF DataContract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2494917/