Я не нашел какой-либо точной документации по этому поводу, да и вопрос в этом особый; мы обязаны использовать DataType = "string" вместо typeof(string) при работе с XmlAttributeAttribute? Например:
XmlAttribute("Description", DataType = "string")
XmlAttribute("Description", typeof(string))
Обе строки выше компилируются; однако при использовании метода typeof(string) я получаю сообщение об ошибке, в котором говорится, что примитивные типы не могут быть указаны (может ли это быть связано с вложенностью классов и переопределенными свойствами?).
Если вы удалите DataType все вместе, по какой-то причине отражение не удастся, и сборка не удастся.
Я что-то делаю не так или так должно быть? Если требуется использовать метод DataType, то как указать пользовательские типы, такие как enum?





DataType используется для простых типов в пространстве имен xsd, например string. Для сложных типов вы указываете свойство Type для XmlAttributeAttribute. Итак, поскольку xsd:string - это простой тип в пространстве имен xsd, вы используете
[XmlAttribute("Name", DataType = "string")]
Если бы у вас было, как вы упомянули, настраиваемое перечисление, вы бы сделали
[XmlAttribute("Name", typeof(MyEnum))]
Это была проблема; Однако есть две вещи. 1. Мне пришлось полностью удалить спецификацию типа для перечислений (не знаю почему). 2. Я совершенно не уверен, почему это вызвало ошибку времени компиляции, а не времени выполнения.