【发布时间】:2010-02-05 22:45:14
【问题描述】:
我有许多使用 JAXB(用于 XML 绑定的 Java 架构)标记的 XML 模式,类似于以下内容:
<?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; }
}
}
是否有任何合理的途径可以实现这一目标?
【问题讨论】: