Dot-Net

具有隻讀屬性的 WCF DataContract

  • March 22, 2010

我試圖從 WCF 中的服務方法返回一個複雜類型。我正在使用 C# 和 .NET 4。這種複雜類型是不變的(與 .net 字元串相同)。此外,服務只返回它,而不會將它作為參數接收。

如果我嘗試僅在屬性上定義 getter,則會出現執行時錯誤。我猜這是因為沒有設置器會導致序列化失敗。不過,我認為這種類型應該是不變的。

例子:

[DataContract]
class A 
{
  [DataMember]
  int ReadOnlyProperty {get; private set;}
}

由於序列化問題,服務無法載入。

有沒有辦法在 WCF DataContract 上創建只讀屬性?也許通過更換序列化程序?如果是這樣,怎麼做?如果不是,您對這個問題有什麼建議?

謝謝,

阿薩夫

DataMember 欄位不能是只讀的,因為 wcf 不會按原樣序列化對象,並且每次反序列化開始之前都會使用預設建構子創建新的對象實例。調度程序在反序列化後使用 setter 設置欄位值。

但是所有大寫的文字都可能是一個大錯誤:)

要使它們真正只讀,請製作伺服器邏輯,驗證此欄位值。

放在[DataMember]備份場上,您將不需要二傳手。

引用自:https://stackoverflow.com/questions/2494917