.net - 具有只读属性的 WCF DataContract

标签 .net wcf .net-4.0 datacontract

我试图从 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/

相关文章:

c# - 为什么接收过多参数的 WCF 服务没有中断?

wcf - 如何从 IIS 托管的 WCF 服务启动可执行文件?

asp.net - BC30560 : 'ExtensionAttribute' is ambiguous in the namespace 'System.Runtime.CompilerServices'

visual-studio-2010 - 适用于 .NET 4.0 的 FxCop

c# - 存储库模式和导航属性

c# - 具有 Application Insights 目标的 NLog 不记录自定义参数和异常

C# 交互窗口丢失方法

.net - 内存泄漏 wcf 与 datacontract 解析器

c# - DataTable的数据

c# - 多目标 .NET 程序集以在 .NET 4.5 和 .NET 4 上使用异步/等待