Подтвердить что ты не робот

System.Runtime.Serialization.InvalidDataContractException: нет установленного метода для свойства

Как показывает ошибка, у меня нет setter для моего свойства, но я не хочу setter, он должен быть только для чтения.

4b9b3361

Ответ 1

Отредактировано: Создайте сеттер internal.

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

Ответ 2

Помните, что WCF необходимо создать экземпляр объекта из его сериализованного представления (часто XML), и если свойство не имеет сеттера, оно не может назначить значение. Объекты не передаются между клиентом и сервером, а только сериализованные представления, поэтому объект должен быть реконструирован с каждого конца.

Ответ 3

Ваш вопрос немного расплывчатый, но я думаю, это ответ, который вы ищете:

Сериализация по умолчанию будет работать только для свойств чтения и записи, потому что вы не можете повторно укрепить объект, не задавая значения свойств. Если вы хотите, чтобы он работал с исходным текстом, вам нужно реализовать интерфейс сериализации самостоятельно, а не просто добавлять атрибуты.

Предполагая, что вы используете сериализацию DataContract, я считаю, что лучший вариант - реализовать ISerializable и реализовать методы самостоятельно.