Мне нужно определить некоторые классы, которые реализуют определения xsd сторонних производителей.XSD довольно сложный, с множеством ограничений и заканчивает перечисления, поэтому я попытался сэкономить немного времени, используя xsd.exe и xsd2code.Однако сгенерированные классы не учитывают атрибут minoccurs = 0 и, в худшем случае, отображают в enum (int) некоторые типы, определенные как string.Например, приведенный ниже тип отображается как перечисление с тем же именем:
<xsd:element name="CodiceFornitura">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="IMP00"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public enum CodiceFornitura
{
/// <remarks/>
IMP00,
}
Другая проблема заключается в том, что какой-то элемент мигрирует или не может быть сериализован: например, если я отправляю тип документа (скажем, OriginalInvoiceUpdate), я должен добавить кусок xml, в котором указано, какой вызов должен быть заменен, в противном случае этот кусок xml должен быть пропущен.
xsd2code имеет два свойства для генерации кода: GenerateShouldSerialize и GeneratePropertyNameSpecified.Установка первого в true не имеет никакого эффекта, установка второго в All генерирует свойства для всех классов, а не только для minoccurs = 0.
Итак, вопросы таковы: 1. Должен ли я изменить сгенерированные источники в соответствии с моими потребностями, есть ли какие-то конфигурации, которые мне не хватает с xsd.exe или xsd2code?2. что XmlSerializer запишет в xml для перечислений: значение перечисления («1») или строковое представление значения (IMP00)?3. есть другие инструменты для сборки исходников из xsd?
Заранее спасибо за любую помощь