WCF дросселирует на свойствах без “набора”. Какое-либо обходное решение?

У меня есть некоторый класс, что я являюсь передающим в результате сервисного метода, и тот класс имеет свойство только добирания:

[DataContract]
public class ErrorBase
{
  [DataMember]
  public virtual string Message { get { return ""; } }
}

Я получаю исключение на сервисной стороне:

Система. Время выполнения. Сериализация. InvalidDataContractException: Никакой метод установки для свойства 'Message' в типе 'MyNamespace. ErrorBase'.

У меня должно быть это свойство как только метод считывания, я не могу позволить пользователям присваивать ему значение. Какое-либо обходное решение я мог использовать? Или я пропускаю некоторый дополнительный атрибут?

94
задан Mafii 3 June 2016 в 12:01
поделиться

4 ответа

Дайте Message общедоступный получатель, но защищенный сеттер, чтобы только подклассы (и DataContractSerializer, потому что он обманывает :), может изменить значение.

103
ответ дан 24 November 2019 в 06:08
поделиться

Даже если вам не нужно обновлять значение, установщик используется WCFSerializer для десериализации объекта (и повторной установки значения).

Это SO - то, что вам нужно: WCF DataContracts

12
ответ дан 24 November 2019 в 06:08
поделиться

А нельзя ли просто иметь сеттер "ничего не делать"???

[DataContract]
public class ErrorBase
{
  [DataMember]
  public virtual string Message 
  {
      get { return ""; } 
      set { }
  }
}

Или сериализатор DataContract тоже на это клюет????

3
ответ дан 24 November 2019 в 06:08
поделиться

Свойства с атрибутом DataMember всегда требуют установки. Вы должны переписать аналогичный объект в клиентском приложении, поскольку членам DataContract всегда могут быть присвоены значения.

2
ответ дан 24 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: