抽象クラスから継承するクラスで構成されたツリー構造を構築するプログラムを作成していますNode
。私のプログラムには、さまざまなタイプのノードが組み込まれています。ただし、より上級のユーザーが私のライブラリを参照して、独自の派生物を作成できるようにしたいと考えていますNode
。これらのプラグイン ライブラリは、アプリの起動時に読み込まれますAssembly.Load()
。したがってNode
、アプリケーションで使用されるすべての潜在的な型は、実行時までわかりません。
さらに、これらのツリーを XML ファイルとの間でシリアライズおよびデシリアライズできるようにしたいと考えています。XMLSerializer、DataContractSerializer、および IXmlSerializable の実装について、ある程度の経験があります。通常、私は DataContractSerializer を使用します。これは、通常、IXmlSerializable を実装するよりも少ないコードで済み、XmlSerializer ではできないプライベート フィールドをシリアル化できるためです。
しかし、このプロジェクトでは、他のユーザーが私のクラスから派生したクラスを作成し、それらをシリアル化するために必要なコードや属性を追加する必要があることも考慮する必要があります。
これを考慮すると、あるシリアル化メカニズムを別のメカニズムよりも優先する必要がある理由はありますか?