私は、抽象的なNode
クラスを継承するクラスで構成されたツリー構造を構築するプログラムを書いています。私のプログラムにはさまざまなタイプのノードが組み込まれています。しかし、より高度なユーザーが自分のライブラリを参照し、Node
という独自の派生形を書くこともできるようにしたいと考えています。これらのプラグインライブラリは、アプリケーションが起動するとAssembly.Load()
まで読み込まれます。したがって、私のアプリケーションで使用されるすべての潜在的なNode
タイプは、実行時まで認識されません。パブリックAPIにはどのようなXMLシリアル化メソッドを使用しますか?
さらに、これらのツリーをXMLファイルとの間でシリアル化およびデシリアライズできるようにしたいと考えています。 XMLSerializer、DataContractSerializer、IXmlSerializableを実装した経験があります。通常、DataContractSerializerはIXmlSerializableを実装するコードが少なくて済み、XmlSerializerではできないプライベートフィールドをシリアル化できます。
しかし、このプロジェクトでは、他のユーザーが自分のクラスから派生したクラスを作成することを考慮する必要がありますし、それらを直列化するために必要なコードや属性も追加する必要があります。
これを考慮すると、あるシリアル化メカニズムを別のものに適用する必要がある理由はありますか?
はい私のプログラム以外のプログラムがこれらのファイルをシリアライズ/デシリアライズする必要がある理由は何もありません。また、今後バイナリなどの他のシリアライズフォーマットを許可する考えも好きです。 –
明確にするために、私が意味する「バイナリ」は、XmlDictionaryWriterクラスが発行できるバイナリシリアル化されたXMLです。私たちはすべてテキストシリアライズされたXMLに慣れていますが、これは単なるシリアライゼーション形式です。 –
* @ John Saunders * XMLを定義するだけではシリアライズ形式があまりにも還元的です... – Luca