2012-02-28 11 views
3

XMLを使用してデバイスと通信する第三者が提供するライブラリを使用しています。ルートタグには2つの属性があります。ドキュメントのすべての例では、これらの2つの属性が特定の順序で表示されています。.NET XmlSerializerが属性を出力する順序を制御する方法はありますか?

適切なXmlAttribute属性でマークされたプロパティを含む.NET XmlSerializerクラスで使用するクラスを作成しました。私のクラスのXmlSerializerの出力には、ドキュメントのすべての例の逆の順序で、これらの2つの属性があります。

私のコードで生成されたXMLをライブラリに渡すと、エラーの戻り値が返されます。しかし、ちょうどキックのために、XMLの&を変更して属性の順序を逆転させました。 Lo &見て、私はOKの戻り値を得た。ドキュメンテーションによると、ライブラリはAnsi Cで書かれているので、.NET XmlSerializerを使用していないと確信しています。

XML標準では、属性の順序は重要ではないと言われています。私は彼らのコードが標準に違反していることを彼らに通知し、うまくいけばそれを修正するでしょう。しかし、その間に では、私はこのプロジェクトを進めなければなりません。 XmlSerializerに逆の順序で属性を出力させる方法はありますか?あるいは私は自分自身でXMLを生成しなければならないのだろうか(パットの巨大な痛み)?

少なくとも私はXmlSerializerクラス&で返されるXmlを解析できますが、属性が自分のコードにどのような順序であるかは関係ありません。

おかげ

トニー

答えて

1

ライブラリが修正される予定であるので、私は非常に迅速かつ汚れた修正を実装することに決めました。

私が元々行っていたことは、XmlSerializerによって生成されたXMLを含む文字列を返したToXml()メソッドを実装することでした。このメソッドは、抽象基本クラスで実装されました。私がしたことは、このメソッドをバーチャル&として残しておきました。次に、各子クラスで、string.Formatを使用してToXmlメソッドのオーバーライドを実装し、属性を持つXMLを目的の順序で作成しました。

これは実装するのに約5分かかりました。私はちょうど&を同じ数行のコードを数回貼り付けるだけでした。

これはパーサーを修正するとすべて消えます。

ありがとうございます。

トニー

0

私はIXmlSerializableを実装すると、この時点で、あなたの唯一のオプションであることを恐れています。

+0

私はあなたが正しいと確信しています。しかし、ライブラリが修正されると、私は一時的な修正を実装しました。下の私の答えを見てください –

関連する問題