我是使用XmlReflectionImporter以编程方式从一些C#类生成XSD文件。我的目标是生成一个代表XML的模式,类似于以下内容:
<MyCriteriaList MinimumMatches="2">
<Criterion>First Criterion</Criterion>
<Criterion>Second ...</Criterion>
...
</MyCriteriaList>
因此,代表这个的示例XSD将是:
<xs:element name="MyCriteriaList" type="ArrayOfCriterion" />
...
<xs:complexType name="ArrayOfCriterium">
<xs:sequence>
<xs:element name="Criterion" type="xs:string" />
</xs:sequence>
<xs:attribute name="MinimumMatches" type="xs:integer" />
</xs:complexType>
代表标准数组的类:
public class Criteria : IList<Criterion>
{
[XmlAttribute]
public int MinimumMatches { get; set; }
// IList implementation...
}
但是,这会生成以下XSD:
<xs:complexType name="ArrayOfCriterion">
<xs:sequence>
<xs:element name="Criterion" type="xs:string" />
</xs:sequence>
</xs:complexType>
属性MinimumMatches被完全忽略,不会作为属性添加到ArrayOfCriterion。
就好像XmlReflectionImporter(或可能是使用导入器结果的XmlSchemaExporter)正在检测Criteria是IList的一个实现并决定它是一个简单的数组,完全丢弃在接口之上添加的任何属性实施
任何提示都非常感谢。
此致
史蒂夫。