XmlSerializerで逆シリアル化する必要のあるxml(制御できません)があります。私の問題は、1つのリスト内の2つの異なるタグ間の順序を保持する必要があることです。例を挙げましょう:
<users>
<luser>..some more elements..</luser>
<luser>..some more elements..</luser>
<admin>..different elements than in luser</admin>
<luser>..some more elements..</luser>
<admin>..different elements than in luser</admin>
<luser>..some more elements..</luser>
<admin>..different elements than in luser</admin>
<users>
さて、これを簡単な方法で逆シリアル化すると、2つのリストができあがります。1つはルーサー用、もう1つは管理者用です。ただし、それらが表示される順序は暗黙のIDです。(もちろん、これはxmlの属性または要素である必要がありますが、残念ながらそうではありません)
私はこのようなメタ要素を作成しようとしました
[XmlElement("luser"),XmlElement("admin")]
public List<Person> Person { get; set; }
と
public class Person
{
public Luser Luser { get; set; }
public Admin Admin { get; set; }
}
ここで、計画は、エントリがluserまたはadminであるかどうかを確認するためにリストをチェックし、peopleラッパーに要素の順序を維持させることでした。ただし、1つのプロパティの複数のXmlElement属性は違法のようです。
もう1つの受け入れ可能な解決策は、2つのリストで終わることですが、各リストの各エントリには、元の注文を取得するために使用できるIDがあります。
これをできるだけきれいにしたいと思います。後でxmlを検索して順序を見つけたり、タグを手動で抽出したりすることは、私が避けて最後の手段として行うことです。