4

私は、抽象的なNodeクラスを継承するクラスで構成されたツリー構造を構築するプログラムを書いています。私のプログラムにはさまざまなタイプのノードが組み込まれています。しかし、より高度なユーザーが自分のライブラリを参照し、Nodeという独自の派生形を書くこともできるようにしたいと考えています。これらのプラグインライブラリは、アプリケーションが起動するとAssembly.Load()まで読み込まれます。したがって、私のアプリケーションで使用されるすべての潜在的なNodeタイプは、実行時まで認識されません。パブリックAPIにはどのようなXMLシリアル化メソッドを使用しますか?

さらに、これらのツリーをXMLファイルとの間でシリアル化およびデシリアライズできるようにしたいと考えています。 XMLSerializer、DataContractSerializer、IXmlSerializableを実装した経験があります。通常、DataContractSerializerはIXmlSerializableを実装するコードが少なくて済み、XmlSerializerではできないプライベートフィールドをシリアル化できます。

しかし、このプロジェクトでは、他のユーザーが自分のクラスから派生したクラスを作成することを考慮する必要がありますし、それらを直列化するために必要なコードや属性も追加する必要があります。

これを考慮すると、あるシリアル化メカニズムを別のものに適用する必要がある理由はありますか?

答えて

2

シリアル化とデシリアライズがアプリケーション内でのみ発生し、他の誰かがシリアル化されたデータを読み取る必要がない場合、シリアライズ形式はAPIに影響しません。 APIについては、不透明なファイルにシリアル化し、同じものから逆シリアル化します。

この場合、必要に応じてバイナリにシリアル化できるため、DataContractSerializerを使用します。

+0

はい私のプログラム以外のプログラムがこれらのファイルをシリアライズ/デシリアライズする必要がある理由は何もありません。また、今後バイナリなどの他のシリアライズフォーマットを許可する考えも好きです。 –

+0

明確にするために、私が意味する「バイナリ」は、XmlDictionaryWriterクラスが発行できるバイナリシリアル化されたXMLです。私たちはすべてテキストシリアライズされたXMLに慣れていますが、これは単なるシリアライゼーション形式です。 –

+0

* @ John Saunders * XMLを定義するだけではシリアライズ形式があまりにも還元的です... – Luca

関連する問題