TWith2Sugars がここに投稿した拡張メソッドが本当に気に入っています。しかし、私は奇妙な問題に遭遇しました。これを共有クラス ライブラリに入れてシリアル化関数を呼び出すと、次のエラーが発生します。
タイプ MyType は予期されていませんでした。XmlInclude または SoapInclude 属性を使用して、静的に認識されていない型を指定します。
少し調べてみたところ、XmlSerializer は認識できる型のみをシリアル化できることがわかりました。これは、クラス ライブラリにあるクラスを意味すると解釈します。そのライブラリに基づいて構築したプロジェクトではありません。
これを回避する方法はありますか?この関数をクラス ライブラリに配置できますか?それとも、それを使用する各プロジェクトに配置する必要がありますか?
アップデート:
何が問題を引き起こしているのかを突き止めました。次のコードがありました:
object o = new MyClass();
o.Serialize();
これがエラーの原因でした。コードを次のように変更したとき:
MyClass c = new MyClass();
c.Serialize();
すべてがうまくいきました。したがって、学んだ教訓 - 一般的なオブジェクトを (逆) シリアル化しようとしないでください。参照したリンクで最も気に入った点は、クラスに XML 属性タグを付ける必要がないことです。拡張メソッドは機能しました。
質問を締めくくる目的で、[XmlInclude] の使用を示すコード サンプルを使用して、Marc の回答(Marc を含む) を拡張する人に回答を授与します。