来自IList子类的.Net XSD生成

时间:2015-08-05 19:15:08

标签: c# xml reflection xsd

我是使用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的一个实现并决定它是一个简单的数组,完全丢弃在接口之上添加的任何属性实施

任何提示都非常感谢。

此致

史蒂夫。

0 个答案:

没有答案