XmlSerializer InvalidOperationExc - 转换类型的已知问题

我正在对XSD.EXE生成的类使用XmlSerializer。
XmlSerializer serializer = new XmlSerializer(obj.GetType());
呕吐   InvalidOperationException无法执行   生成一个临时类(result = 1)。   错误CS0030:无法转换类型   'itemOrderItemsItem []'到   'itemOrderItemsItem'错误CS0029:   无法隐式转换类型   'itemOrderItemsItem'来   'itemOrderItemsItem []' 修复程序(下面标有
<!--fix...-->
)表示要在我的架构中添加一些愚蠢的元素,但这不起作用。这个修复已有五年了。有解决方案吗?
              <xs:sequence>
              <xs:element name="item" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="model" type="xs:string" minOccurs="0" />
                    <xs:element name="description" type="xs:string" minOccurs="0" />
                    <xs:element name="material" type="xs:string" minOccurs="0" />
                    <xs:element name="lot" type="xs:string" minOccurs="0" />
                    <xs:element name="serial" type="xs:string" minOccurs="0" />
                    <xs:element name="transferQty" type="xs:string" minOccurs="0" />
                    <xs:element name="shipQty" type="xs:string" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>     
            </xs:sequence>
       <xs:attribute name="tmp" type="xs:string" /><!--fix...-->
    
已邀请:
这为我修复了,在xsd文件中,子元素有maxOccurs =“unbounded”我在
</xs:sequence>
之后添加了额外的行:
<xs:attribute name="tmp" type="xs:string" />
它是XmlSerializer代码生成组件中的一个已知问题:它无法处理嵌套无界元素的某些情况。它创建的对象模型无效:用户无法使用它来生成xml消息。 不幸的是要解决这个问题,你必须编辑你的模式,以确保所有类似数组的结构都能得到妥善处理。 您需要稍微修改具有以下内容的所有架构构造:
<xs:sequence maxOccurs="unbounded">
  <xs:element ../>
<xs:sequence>
要么
<xs:sequence>
  <xs:element maxOccurs="unbounded"/>
<xs:sequence>
必须改为(分别)
<xs:sequence maxOccurs="unbounded">
  <xs:element ../>
<xs:sequence>
<xs:attribute name="tmp" type="xs:string" /> <!--FIX LINE TO BE ADDED-->
要么
<xs:sequence>
  <xs:element maxOccurs="unbounded"/>
<xs:sequence>
<xs:attribute name="tmp" type="xs:string" /> <!--FIX LINE TO BE ADDED-->
    
如果您有表单的XML
 <items>
    <item>
      <model>10</model>
      <description>Torque wrench</description>
      <material>100</material>
      <lot>3</lot>
      <serial></serial>
      <transferQty>1</transferQty>
      <shipQty></shipQty>
    </item>
    <item>
           //...
    </item>
    <item>
           //...
    </item>
  </items>
Xsd.exe将生成一个xsd:
<xs:element name="items" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="item" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="model" type="xs:string" minOccurs="0" />
                        <xs:element name="description" type="xs:string" minOccurs="0" />
                        <xs:element name="material" type="xs:string" minOccurs="0" />
                        <xs:element name="lot" type="xs:string" minOccurs="0" />
                        <xs:element name="serial" type="xs:string" minOccurs="0" />
                        <xs:element name="transferQty" type="xs:string" minOccurs="0" />
                        <xs:element name="shipQty" type="xs:string" minOccurs="0" />
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
然后   xsd.exe“this.xsd”/ c 生成具有二维数组的类(items [] [])。我只想要一维数组。我改变了第一行:
<xs:element name="items" minOccurs="0"><!--got rid of maxOccurs (which is what causes the issue)-->
现在它有效。猜测序列化器只是二维数组上的barfs。幸运的是我不需要它们。     

要回复问题请先登录注册