C # класс из xml - PullRequest
       19

C # класс из xml

2 голосов
/ 16 мая 2011

Я использую xsd для генерации классов из XML-файла. Он работает нормально, но есть одна часть XML-файла, которая не генерируется, как мне хотелось бы.

Вот пример раздела xml:

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

В xsd, сгенерированном из xml, я вижу этот раздел:

<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.

Можно ли мне сгенерировать мой класс, чтобы он мог обрабатывать переменное число элементов для Продукта?

1 Ответ

4 голосов
/ 16 мая 2011

У вас есть два варианта:

  1. Если вы хотите сохранить простоту и порядок элементов всегда одинаковых типов (то есть всегда строковые, десятичные, целые и т. Д.), Просто сгенерируйте схему, используя тип Product со всеми 8.

  2. Сделайте вашу схему более сложной, и сделайте «Продукт» списком Типов Продукта (который определит, что представляет собой каждый продукт).

Что-то вроде:

<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>

Это xml, так что есть множество хороших способов сделать это.

...