来自xml的C#类

来自xml的C#类,c#,.net,xml,xml-serialization,xml-deserialization,C#,.net,Xml,Xml Serialization,Xml Deserialization,我使用xsd从xml文件生成类。它工作正常,但xml文件中有一部分没有按照我的要求生成 以下是xml的一个示例部分: <Product> <p0>Stapler</p0> <p1>1.50</p1> <p2>0</p2> </Product> 订书机 1.50 0 在从xml生成的xsd中,我看到了以下部分: <xs:element name="Product" minOccu

我使用xsd从xml文件生成类。它工作正常,但xml文件中有一部分没有按照我的要求生成

以下是xml的一个示例部分:

<Product>
  <p0>Stapler</p0>
  <p1>1.50</p1>
  <p2>0</p2>
</Product>

订书机
1.50
0
在从xml生成的xsd中,我看到了以下部分:

<xs:element name="Product" minOccurs="0" maxOccurs="unbounded">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="p0" type="xs:string" minOccurs="0" />
      <xs:element name="p1" type="xs:decimal" minOccurs="0" />
      <xs:element name="p2" type="xs:decimal" minOccurs="0" />      
    </xs:sequence>
  </xs:complexType>
</xs:element>

这里的问题是,我试图反序列化的xml响应在Product部分中具有不同数量的元素。在上面的例子中,它从p0变为p2。其他反应可能从p0到p8

有没有一种方法可以让我生成一个my类,这样它就可以处理产品中数量可变的元素

您有两个选择:

  • 如果您想保持简单性,并且元素的顺序总是相同的类型(因此总是string、decimal、int等),那么只需使用包含所有8个元素的产品类型生成模式即可

  • 使您的模式更加复杂,并使“产品”成为产品类型的列表(这将定义每个产品是什么)

  • 比如:

    <Product>
      <ProductType id="name" _type="xs:string">
           <Value>Stapler</Value>
      </ProductType>
      <ProductType id="cost" _type="xs:decimal">
           <Value>1.50</Value>
      </ProductType>
       <ProductType id="quantity" _type="xs:decimal">
           <Value>0</Value>
      </ProductType>
    </Product>
    
    
    订书机
    1.50
    0
    
    它是xml,所以有很多好方法可以做到这一点