У меня есть простая схема, где я объявляю и minOccurs и maxOccurs к 1. Когда я выполняю XSD.exe, чтобы генерировать класс C# и использовать класс в коде; поле не осуществляется как обязательное. Там некоторый дополнительный шаг отсутствует? или классы, сгенерированные с помощью XSD.exe, не делают обязательных полей?
любые предложения или понимание будут полезны.
Как бы вы обеспечили соблюдение произвольной минокуры в коде? Какие-то утверждения? Я полагаю, вы можете только отображать на "Non-nullable single instance" (1:1) non-nullable array (1:many) и их nullable эквиваленты (0;1), и (0:many)
Как и инструмент схемы Xml / infer в Visual Studio, всякий раз, когда я использовал XSD.exe, мне приходилось исправлять часть сгенерированного кода. XSD.exe дает хорошее приближение, но не работает полностью.
Ошибка minOccurs / maxOccurs задокументирована в MSDN.
При генерации исходного кода из документа схемы XML Xsd.exe игнорирует атрибут minOccurs, примененный к
, , , Элементы , и . Для элемента Xsd.exe игнорирует атрибут minOccurs, если значение атрибута maxOccurs больше 1 или не ограничено. В этом случае инструмент создает массив типа, соответствующего типу данных XSD . Xsd.exe использует значение атрибута maxOccurs, чтобы определить , создавать ли один экземпляр или массив.
Для элемента Xsd.exe также игнорирует атрибут minOccurs , если он применяется к типу данных схемы , который преобразуется в .NET Framework {{1} } ссылочный тип.
Только при выполнении всех следующих условий Xsd.exe использует значение атрибута minOccurs:
Элемент задействован.
Атрибут maxOccurs определяет один экземпляр .
Тип данных преобразуется в тип значения .
Вы правы в том, что XSD.EXE не требует выполнения требований. Это как задумано.