XmlReader と共に XML ファイルを使用して、クラス オブジェクトを作成しています。
これが私のクラスオブジェクトです:
public class WikiMeta
{
    string _subject;
    public List<WikiArticle> Articles = new List<WikiArticle>();
    public List<WikiGroup> Groups = new List<WikiGroup>();
    public string PageMetaDescription { get; set; }
    public string PageTitle { get; set; }
    public string Route { get; set; }
    public string Subject { get; set; }
}
XML のサンプルを次に示します。
<AllMeta>
  <WikiMeta>
    <Subject>The Subject</Subject>
    <PageTitle>Page title</PageTitle>
    <PageMetaDescription>Page meta description</PageMetaDescription>
    <Articles>
      <WikiArticle>
        <FileName>file.txt</FileName>
      </WikiArticle>
    </Articles>
    <Groups>
      <WikiGroup>
        <Name>Main group</Name>
      </WikiGroup>
      <WikiGroup>
        <Name>Secondary group</Name>
      </WikiGroup>
    </Groups>
  </WikiMeta>
</AllMeta>
XmlReader クラスを使用すると、XML はクラス プロパティに自動的にマップされますが、記事の種類にバリエーションを導入したいと考えています。私にとって2つの明らかな解決策は次のとおりです。
- WikiGroup を 2 つの新しいグループ PeerGroup と ChildGroup に置き換えます
 - WikiGroup 内に Type 要素を追加する
 
しかし、WikiGroup に属性を追加し、それをクラス内の 2 つの異なるプロパティにマッピングする方法があるかどうか疑問に思いました。たとえば、次のようになります。
WikiGroup attr="peer">
        <Name>Main group</Name>
      </WikiGroup>
[XmlAttribute("peer")]
public WikiGroup PeerGroup { get; set; }
[XmlAttribute("child")]
public WikiGroup ChildGroup { get; set; }
これが可能かどうかはわかりませんが、アドバイスをいただければ幸いです。