2017-03-22 5 views
0

私はxsd.exeツールを使用してクラスに変換した非常に複雑なXSDスキーマを持っています。要素に「Choice」タグが含まれていて、使用可能な選択肢がすべて異なるカスタムタイプであった場合のために、いくつかの設定を追加/編集する必要がありました。それはすべてうまくいきました。シーケンスでプロパティをシリアライズ

私が直面した問題は、 'Sequence'タグを含む要素が必ずしも順番に直列化されないということです。私は、例えば、注文の属性を使用して順序を強制しようとしている:

<XmlElement(Order:=5)> 
Public Property no_autor() As String 
    Get 
     Return Me.no_autorField 
    End Get 
    Set 
     Me.no_autorField = Value 
    End Set 
End Property 

しかし、適切にシリアライズされていない型が基本型に由来します。基本型は2つの要素しか持たないので、Order = 1とOrder = 2の順に並べます。この時点で、それは混乱し始めます。派生型は別のクラスにあるので、1または3で順序を開始しますか?私は基本型が常に最初にシリアル化されるので、おそらく派生型が1で始まっていても基本型の後に正しく並べ替えると思ったので、MSDNのドキュメントを読んだことがあります。私が1または3で始めるときに、クラス全体がシリアル化できないという簡単なエラーが表示されます。プロパティが

System.Xml.Serialization.XmlIgnoreAttribute() 

が飾られている場合

また、私はまだそれが順序に含まれていますか?

最後に、XSDファイルに表示されるようにシーケンスを適用する方が良いでしょうか?私が言及したように、このファイルは非常に複雑で、Choice、Sequence、Extensionタグでいっぱいです。すべての要素を通過し、Orderを追加してから(そしてそれが何度も失敗する)、派生したすべての型(通常2〜3つの深さ)を考慮に入れることは、非常に効率的な時間の使用ではありません。

答えて

0

Sequenceタグ内の要素の順序を強制するより良い方法があります。 xsd.exeを使用してクラス構造を生成する場合は、 'order'スイッチを使用します。結果のクラスファイルには、必要なすべてのOrder属性が含まれます。

例えば、脇同じよう

C:\folder>xsd mySchema.xsd /l:VB /c /order 

、私はそれがデフォルトでXSDファイルに記載されているように、XSDユーティリティは、順序を強制しないだろう、なぜ表示されません。 Sequenceタグは、含まれる要素に特定の順序を強制するためのものです。順序付けされた要素を順番に表示する必要があることを示す必要があることは冗長であるようです。

関連する問題