У меня есть несколько схем XML, которые используют разметку JAXB (Java Architecture для XML Binding), аналогично следующему:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="1.0">
<xs:element name="H">
<xs:annotation>
<xs:appinfo>
<jxb:class name="Header" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element ref="X" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:appinfo>
<jxb:property name="SessionControl"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="X" type="xs:string">
<xs:annotation>
<xs:appinfo>
<jxb:class name="SessionControl"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:schema>
Из них мне нужно создать классы C #.
Запуск xsd.exe в приведенной выше схеме приводит к следующему (некоторые атрибуты удалены для ясности):
[XmlRoot(Namespace = "", IsNullable = false)]
public partial class H
{
private string xField;
public string X
{
get { return this.xField; }
set { this.xField = value; }
}
}
Ясно, что это не идеально - мне нужно учитывать разметку jxb:class
и jxb:property
в схеме, давая мне класс, который использует более читаемые имена jxb
, но сериализуется в односимвольный элементы / атрибуты, указанные в схеме.
, например
[XmlRoot(Namespace = "", IsNullable = false, ElementName = "H")]
public partial class Header
{
private string xField;
[XmlElement(ElementName = "X")]
public string SessionControl
{
get { return this.xField; }
set { this.xField = value; }
}
}
Есть ли разумный путь для достижения этого?