WCF DataContract со свойствами только для чтения

Я пытаюсь возвратить составной тип из сервисного метода в WCF. Я использую C# и.NET 4. Этот составной тип предназначен для инварианта (тот же способ, которым строки .NET). Кроме того, сервис только возвращает его и никогда не получает его как аргумент.

Если я пытаюсь определить только методы считывания на свойствах, я получаю ошибку периода выполнения. Я предполагаю, что это вызвано тем, что никакие методы set не заставляют сериализацию перестать работать. Однако, я думаю, что этот тип должен быть инвариантным.

Пример:

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

Сервису не удается загрузиться из-за проблемы с сериализацией.

Существует ли способ сделать свойства только для чтения на WCF DataContract? Возможно, путем замены сериализатора? Если так, как? В противном случае, что Вы предложили бы для этой проблемы?

Спасибо,
Asaf

18
задан Jeff B 6 November 2015 в 22:14
поделиться

3 ответа

Поле DataMember не может быть доступно только для чтения, потому что wcf не сериализует объект как есть и каждый раз перед началом десериализации создает новый экземпляр объекта, используя конструктор по умолчанию. Диспетчеры используют сеттеры для установки значений полей после десериализации.

Но весь верхний текст может быть большой ошибкой :)

Чтобы сделать их действительно доступными только для чтения, создайте логику сервера, проверяя значения этого поля.

5
ответ дан 30 November 2019 в 07:44
поделиться

Вы пробовали сделать сеттер приватным?

Что-то вроде:

public string MyProperty
{
get;
private set;
}
-1
ответ дан 30 November 2019 в 07:44
поделиться

поместите [DataMember] в резервное поле, сеттер вам не понадобится.

16
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

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