Это ограничение XmlSerializer
. Обратите внимание, что BinaryFormatter
и DataContractSerializer
не требуют этого - они могут создать неинициализированный объект из эфира и инициализировать его во время десериализации.
Поскольку вы используете xml, вы можете рассмотреть возможность использования DataContractSerializer
и пометить свой класс [DataContract]
/ [DataMember
], но учтите, что это меняет схему (например, нет эквивалента [XmlAttribute]
- все становится элементами).
Обновление: если вы действительно хотите знать, BinaryFormatter
и др. Используйте FormatterServices.GetUninitializedObject()
для создания объекта без вызова конструктора. Вероятно, опасно; Я не рекомендую использовать его слишком часто ;-p См. Также замечания по MSDN:
Потому что новый экземпляр объекта
инициализируется в ноль и нет
конструкторы запускаются, объект может
не представляет государство, которое считается
как действительный для этого объекта. Электрический ток
метод должен использоваться только для
десериализация, когда пользователь намерен
немедленно заполнить все поля. Это
не создает неинициализированный
строка, так как создание пустого
экземпляр неизменяемого типа служит
без цели.
У меня есть собственный механизм сериализации, но я не собираюсь использовать его FormatterServices
; Мне очень нравится знать, что конструктор ( любой конструктор) действительно выполняется.