Полагаю, мое предположение о том, что инструмент xsd генерирует только перечисления для значений перечисления, определенных для типов xs:string
, верно. Я попробовал следующую простую XML-схему:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="MyClass">
<xs:complexType>
<xs:sequence>
<xs:element name="MyStringEnum">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Val1" />
<xs:enumeration value="Val2" />
<xs:enumeration value="Val3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="MyIntEnum">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:enumeration value="2" />
<xs:enumeration value="4" />
<xs:enumeration value="6" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
При запуске инструмента xsd для этого создаются следующие классы:
using System.Xml.Serialization;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://tempuri.org/XMLSchema.xsd")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://tempuri.org/XMLSchema.xsd", IsNullable=false)]
public partial class MyClass {
private MyClassMyStringEnum myStringEnumField;
private int myIntEnumField;
/// <remarks/>
public MyClassMyStringEnum MyStringEnum {
get {
return this.myStringEnumField;
}
set {
this.myStringEnumField = value;
}
}
/// <remarks/>
public int MyIntEnum {
get {
return this.myIntEnumField;
}
set {
this.myIntEnumField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://tempuri.org/XMLSchema.xsd")]
public enum MyClassMyStringEnum {
/// <remarks/>
Val1,
/// <remarks/>
Val2,
/// <remarks/>
Val3,
}
Как вы можете легко видеть, enum
для элемента на основе xs:string
сгенерирован, тогда как элемент на основе xs:int
создается просто как тип int. Я все еще ищу документацию, чтобы подтвердить это, но результаты теста говорят сами за себя.