2011-01-23 6 views
2

私は抽象基本クラス型を公開するアプリケーションのプラグインを作成しており、そこからクラスが導出されるはずです。 インスタンス化されたクラスを後で取得するために保存するとき、アプリケーションはXMLシリアライザを使用してシリアライザを公開せずにクラスをシリアライズします。それは私のクラスをシリアル化しようとするとXML:ベースクラスまたはシリアライザインスタンスにアクセスすることなく、派生クラスをシリアル化しますか?

明らか

は、XMLシリアライザは、XmlIncludeまたはSoapIncludeを使用してください。が予想されなかったメッセージ

「タイプYourDerivedTypeで、System.InvalidOperationException例外をスロー 属性に静的に知られていないタイプの を指定してください。

私は、基本クラスへのアクセスを持っていないので、私はXmlInclude属性とそれを飾ることができず、アプリケーションは独自のシリアライザを使用するので、私はnew XmlSerializerを使用することはできません、そのコンストラクタに私の派生型を渡します、このXmlSerializerを使用してシリアル化します。

私のクラスをシリアル化してこの例外をなくす方法についての提案はありますか?

+0

これは、そうするべきではありません。接続しているアプリケーションによって提供されるガイドラインはありませんか?彼らがプラグインのためにこのアーキテクチャーを特別に設計したのであれば、それは簡単でなければならないか、それを混乱させてしまっているはずです。それは確立されたアプリの場合おそらく後者ではない。あなたが間違っているかどうかを確認するために参照できる例はどれですか? – Rory

+0

私はロリーに同意します、それは理想的には理想的なものよりも複雑です。私は、アプリケーションの製品チームに、私たちがどのように動作させるかについての提案を求めました。 – Satyajit

答えて

1

派生クラスにIXmlSerializableを実装し、XMLシリアライザがそれを認識して使用することを期待してください。もしそうでなければ、あなたは運がないと思う。

クラスにパラメータのないコンストラクタがあることを確認してください(忘れやすいが、IXmlSerializableにとって必須)。

+0

こんにちはRoryさん、はい、私はそれをやってみましたが、今は別のSystem.InvalidOperationException例外に直面しています: "YourDerivedTypeをこのコンテキストで使用することはできません。 YourDerivedType型のオブジェクトは、ArrayListsなどの型指定されていないコレクションでは使用できない可能性があります。この例外のため、IXmlSerializableメソッドのいずれかが実際に呼び出されている時点にはまだ達していません – Satyajit

関連する問題