状況により、Mono で .NET 3.5 アプリケーションを実行することが必要になりました。アプリケーションは特別なライブラリを使用しませんが、XML シリアライザーに大きく依存して複雑なモデルをロードします。
具体的には、次のような XML ステートメントがあります。
<compare-clause>
<first-element />
<second-element />
</compare-clause>
first-element と second-element はいくつかの異なる型にすることができますが、どちらが左オペランドでどちらが右オペランドであるかを定義するため、順序は重要です。これは MS では常に問題なく動作しますが、Mono (一部の要素を含む) では非常に奇妙な動作が発生します。Mono は最初のプロパティの割り当てを無視し、最初の要素をターゲット オブジェクトの 2 番目のプロパティに割り当て、XML の 2 番目の要素を完全に除外します。
クラスの XML 注釈は次のようになります。
[XmlElement("first-element"), Type=typeof(FirstElementType), Order=1]
[XmlElement("second-element"), Type=typeof(SecondElementType), Order=1]
public ElementBase Left { ... }
[XmlElement("first-element"), Type=typeof(FirstElementType), Order=2]
[XmlElement("second-element"), Type=typeof(SecondElementType), Order=2]
public ElementBase Right { ... }
私が言ったように、状況によっては機能しません。順序を入れ替えると役立つ場合がありますが、すべての型は同じ構造を持ち、両方のプロパティの注釈は Order=1,2 を除いて同じです。これは常に MS .NET で機能します。最初の要素が注釈の 2 番目の要素の前に来る場合、おそらく何か関係があるかもしれませんが、これは一般的な属性の仕様 (順序は関係ありません) に従って完全に無関係である必要があります。
もしかしたら、これはまだ Mono XML Serialzer のバグなのかもしれませんし、私が誤用したために MS でしか動作しないのかもしれません。それでも、アプリケーションを完全に機能させるには、XML シリアライザーの最新バージョン (2013 年 1 月) を使用する必要がありました。
これに関するヒントをいただければ幸いです。よろしくお願いします