2

XmlSerializer を使用してオブジェクトをシリアル化し、XSD で定義された順序を使用したいと考えています。

たとえば、次のような要素を持つ XSD があります。

...
<xs:element name="Screen" minOccurs="1" maxOccurs="1">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Yaxis" minOccurs="1" maxOccurs="1" type="ab:AxisType"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
...

<xs:complexType name="AxisType">
  <xs:sequence>
    <xs:group ref="ab:IntervalSegmentGroup" minOccurs="1" maxOccurs="unbounded"/>
    <xs:element name="LastPoint" minOccurs="1" maxOccurs="1" type="ab:PointType" />
  </xs:sequence>
</xs:complexType>

<xs:group name="IntervalSegmentGroup">
  <xs:sequence>
    <xs:element name="Point" minOccurs="1" maxOccurs="1" type="ab:PointType"/>
    <xs:element name="Interpolation" minOccurs="1" maxOccurs="1" type="xs:string"/>
  </xs:sequence>
</xs:group>

<xs:complexType name="PointType">
  <xs:sequence>
    <xs:element name="Relative" type="xs:decimal" minOccurs="1" maxOccurs="1"/>
    <xs:element name="Absolute" type="xs:decimal" minOccurs="1" maxOccurs="1"/>
  </xs:sequence>
</xs:complexType>
...

次に、XSD.exe を使用して、このためのスタブ クラスを作成しました。次に、これらのクラスからオブジェクトを作成し、データを入力します。そして、それらを XMLSerializer でシリアライズします。

私が得たい結果は次のようなものです:

...
<Yaxis>
  <Point>
    <Relative>0</Relative>
    <Absolute>0</Absolute>
  </Point>
  <Interpolation>linear</Interpolation>
  <Point>
    <Relative>0.456</Relative>
    <Absolute>100</Absolute>
  </Point>
  <Interpolation>linear</Interpolation>
  <Point>
    <Relative>0.645</Relative>
    <Absolute>342</Absolute>
  </Point>
  <Interpolation>linear</Interpolation>
  <LastPoint>
    <Relative>1</Relative>
    <Absolute>3920</Absolute>
  </LastPoint>
</Yaxis>
...

しかし、私が得るものは:

...
<Yaxis>
  <Point>
    <Relative>0</Relative>
    <Absolute>0</Absolute>
  </Point>
  <Point>
    <Relative>0.456</Relative>
    <Absolute>100</Absolute>
  </Point>
  <Point>
    <Relative>0.645</Relative>
    <Absolute>342</Absolute>
  </Point>
  <Interpolation>linear</Interpolation>
  <Interpolation>linear</Interpolation>
  <Interpolation>linear</Interpolation>
  <LastPoint>
    <Relative>1</Relative>
    <Absolute>3920</Absolute>
  </LastPoint>
</Yaxis>
...

XSD に対して XML を検証しようとすると、ポイント、補間、ポイントの順序が確認されないため、失敗します。

私は何を間違っていますか?これを何らかの方法で制御できますか?

4

1 に答える 1

0

XSD.exe の Order 引数を指定できるクラスの生成中に試行します。

XSD.exe.

/order すべてのパーティクル メンバーに明示的な順序識別子を生成します。

これで問題が解決するかもしれません。

于 2012-04-17T11:40:21.283 に答える