более строгий XmlSerializer, который не допускает неиспользуемых узлов
-
11-12-2019 - |
Вопрос
Я создал классы C# на основе XSD с помощью инструмента xsd.exe из SDK.Затем я могу использовать этот класс для [де]сериализации объектов с помощью XmlSerializer...Однако сериализатор кажется очень снисходительным.
Возможно ли, что я могу заставить сериализатор выдавать исключение в случае отсутствия свойства или «странного» узла XML?
Я думаю, что один из способов — изменить установщик свойства и заставить его проверять данные (или использовать проверку XSD)...Однако есть ли другое альтернативное решение этой проблемы?
Решение
Вы можете реализовать IXmlSerializable
интерфейс и в ReadXml
метод реализации, проверьте наличие конкретных элементов, которые вам нужны, выдайте исключения, если вы их не найдете (или установите любое уведомление, которое вам нужно).
Если вы хотите использовать схему для проверки (чтобы использовать minOccurs
и maxOccurs
атрибуты схемы, например), то вы можете настроить XmlReader
экземпляр для проверки на соответствие схеме, установив Schemas
свойство на XmlReaderSettings
сорт что вы переходите к Create
метод (обратите внимание, что существуют перегрузки Create
которые занимают TextReader
, и т. д.).