Как показывает ошибка, у меня нет setter для моего свойства, но я не хочу setter, он должен быть только для чтения.
System.Runtime.Serialization.InvalidDataContractException: нет установленного метода для свойства
Ответ 1
Отредактировано: Создайте сеттер internal
.
Это все равно будет устанавливаться внутри сборки, но это хороший трюк, который хорошо работает при использовании в объектах данных, расположенных внутри сборки, которые потребляются другими, поскольку те, кто потребляет сборки, не смогут установить свойство, но могут использоваться различные сериализаторы.
Ответ 2
Помните, что WCF необходимо создать экземпляр объекта из его сериализованного представления (часто XML), и если свойство не имеет сеттера, оно не может назначить значение. Объекты не передаются между клиентом и сервером, а только сериализованные представления, поэтому объект должен быть реконструирован с каждого конца.
Ответ 3
Ваш вопрос немного расплывчатый, но я думаю, это ответ, который вы ищете:
Сериализация по умолчанию будет работать только для свойств чтения и записи, потому что вы не можете повторно укрепить объект, не задавая значения свойств. Если вы хотите, чтобы он работал с исходным текстом, вам нужно реализовать интерфейс сериализации самостоятельно, а не просто добавлять атрибуты.
Предполагая, что вы используете сериализацию DataContract, я считаю, что лучший вариант - реализовать ISerializable и реализовать методы самостоятельно.