У меня есть некоторый класс, что я являюсь передающим в результате сервисного метода, и тот класс имеет свойство только добирания:
[DataContract]
public class ErrorBase
{
[DataMember]
public virtual string Message { get { return ""; } }
}
Я получаю исключение на сервисной стороне:
Система. Время выполнения. Сериализация. InvalidDataContractException: Никакой метод установки для свойства 'Message' в типе 'MyNamespace. ErrorBase'.
У меня должно быть это свойство как только метод считывания, я не могу позволить пользователям присваивать ему значение. Какое-либо обходное решение я мог использовать? Или я пропускаю некоторый дополнительный атрибут?
Дайте Message общедоступный получатель, но защищенный сеттер, чтобы только подклассы (и DataContractSerializer, потому что он обманывает :), может изменить значение.
Даже если вам не нужно обновлять значение, установщик используется WCFSerializer для десериализации объекта (и повторной установки значения).
Это SO - то, что вам нужно: WCF DataContracts
А нельзя ли просто иметь сеттер "ничего не делать"???
[DataContract]
public class ErrorBase
{
[DataMember]
public virtual string Message
{
get { return ""; }
set { }
}
}
Или сериализатор DataContract тоже на это клюет????
Свойства с атрибутом DataMember всегда требуют установки. Вы должны переписать аналогичный объект в клиентском приложении, поскольку членам DataContract всегда могут быть присвоены значения.