导出XSD元素时出现SVCUTIL错误-maxoccurs必须=1

导出XSD元素时出现SVCUTIL错误-maxoccurs必须=1,xsd,svcutil.exe,complextype,Xsd,Svcutil.exe,Complextype,在使用Svcutil将XSD转换为C#对象时,我遇到了一个非常奇怪的错误 这是我的XSD <xs:element name="TestResults"> <xs:complexType> <xs:sequence> <xs:element name="TestResult" type="TestResultType" minOccurs="0" maxOccurs="unbounded"/>

在使用Svcutil将XSD转换为C#对象时,我遇到了一个非常奇怪的错误

这是我的XSD

<xs:element name="TestResults">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="TestResult" type="TestResultType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="atoken" type="IdentifierType"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
如果我将“TestResult”属性“maxOccurs”设置为1,那么一切正常。如果我完全删除“atoken”元素,它还可以与“TestResult”属性“maxOccurs”=“unbounded”一起使用

查看的架构引用,我发现以下内容:

<xs:element> can occur in the following contexts:

It can occur within an <xs:sequence>, which describes a data member of a regular (non-collection) data contract. In this case, the maxOccurs attribute must be 1. (A value of 0 is not allowed).

It can occur within an <xs:sequence>, which describes a data member of a collection data contract. In this case, the maxOccurs attribute must be greater than 1 or "unbounded".
可以在以下上下文中出现:
它可以发生在中,它描述了常规(非收集)数据协定的数据成员。在这种情况下,maxOccurs属性必须为1。(不允许值为0)。
它可以发生在中,它描述了集合数据协定的数据成员。在这种情况下,maxOccurs属性必须大于1或“无界”。
因此,在我的特定XSD中,Svcutil认为这两个元素都应该具有“maxOccurs”=1,即使是作为集合的元素

这种行为正确吗?还是我做错了什么?


<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">   
<xs:element name="TestResults" >
<xs:complexType>
<xs:sequence>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="TestResult" type="xs:string"/>
        <xs:element name="atoken" type="xs:string"/>
    </xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
请看一看
感谢您提供有关如何解决此问题的建议

经过多次尝试,下面是我最终如何让它工作的。我不得不添加一个中间元素来保存我的“TestResult”集合。通过这种方式,我的外部序列包含两个都是“简单”元素的元素(尽管它们不是真正的元素)



谢谢,但恐怕这两个选项都不起作用。在选项1中,我得到一个错误,即根上的“maxOccurs”必须为1。如果我更改为它,则返回到“TestResult”的原始错误。对于选项2,我得到一个错误,即“all”组中的maxOccurs必须为0或1。恐怕您建议的替代方案也不起作用。我收到一个错误,该错误似乎表明作为根元素的“TestResults”不能具有嵌套序列:错误:无法导入命名空间“”中的类型“TestResults”。根序列必须仅包含局部元素。不支持Group ref、choice、any和嵌套序列。更改架构以使类型可以映射到数据协定类型,或者使用ImportXmlType或使用其他序列化程序。@maurocam是否可以在此处发布整个架构?很抱歉,无法发布整个架构,因为它是机密的。将需要时间来呈现通用性。关键的一点是,“TestResult”是“TestResultType”的类型化集合,而不是您所指出的“xs:string”。@maurocam;如果您尝试了以上所有更新;如果仍然不工作,那么问题不在于XSD。需要检查解析器和XML。最后,我添加了字符串来验证我这边的XSD,同时测试您可以将其更改为您的XSD。再见!但您添加了新元素
<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">   
<xs:element name="TestResults" >
<xs:complexType>
<xs:sequence>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="TestResult" type="xs:string"/>
        <xs:element name="atoken" type="xs:string"/>
    </xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<xs:element name="TestResults">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Token" type="IdentifierType" minOccurs="1" maxOccurs="1"/>
      <xs:element name="TestResultList">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="TestResult" type="TestResultType" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>