[英]Generate C# enumeration with explicit numerical values from XSD
我有一個 XSD,我在其中定義了一個枚舉,為每個元素指定了數值。 它看起來如下:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://mariusbancila.ro/demo/1.0" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://mariusbancila.ro/demo/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="statusCode">
<xs:restriction base="xs:string">
<xs:enumeration value="none"/>
<xs:enumeration value="alpha">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">100</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="beta">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">200</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="gamma">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">300</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:element name="demo">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="status" type="tns:statusCode"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我使用xsd.exe
從中生成 C# 類( xsd.exe /namespace:Demo /language:cs /c demo.xsd
)。 結果如下:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://mariusbancila.ro/demo/1.0")]
public enum statusCode {
/// <remarks/>
none,
/// <remarks/>
alpha,
/// <remarks/>
beta,
/// <remarks/>
gamma,
}
我的期望是我得到以下內容:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://mariusbancila.ro/demo/1.0")]
public enum statusCode {
/// <remarks/>
none,
/// <remarks/>
alpha = 100,
/// <remarks/>
beta = 200,
/// <remarks/>
gamma = 300,
}
我的問題是這些枚舉的數值已存儲在數據庫中。 在下一個版本中,XSD 中的枚舉已更改, xsd.exe
生成的新枚舉值介於之前的枚舉值之間。 例如:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://mariusbancila.ro/demo/2.0")]
public enum statusCode {
/// <remarks/>
none,
/// <remarks/>
alpha,
/// <remarks/>
beta,
/// <remarks/>
delta, // this is now 3
/// <remarks/>
gamma, // this used to be 3, now it's 4
}
這弄亂了系統其他部分中存儲的數值的處理。
因此,我正在尋找一種方法來生成帶有數值的 C# 代碼。 我知道我可以手動編輯結果,但這很容易出錯,並且每次 XSD 更改時都需要手動干預,這是我絕對想避免的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.