インスタンスが派生していない場合、XmlSerializer はオブジェクトに対してスムーズに動作するようです。それ以外の場合は、属性を明示的に適用して、特定の派生クラスを基本クラスに含める必要があります。XmlSerializer に、オブジェクトの派生部分を自動的にシリアル化するように指示する方法はありますか? 入力を減らしたいだけです。
1 に答える
それらを指定する必要性は、主にそれらをデシリアライズしなければならないという複雑さのために生じます。結局のところ、シリアル化の時点で、継承ツリーをたどって情報を見つけることができます。ただし、 a を逆シリアル化するように求められた場合を考えてみてくださいFoo
。ただし、それを取得し<bar>
ても、型を解決する方法はすぐにはわかりません。
XmlSerializer は、賢明なことに、明らかにシリアル化がコンストラクターを呼び出さない場合に、シリアル化する前にパラメーターなしのパブリック コンストラクターを必要とするのと同じ方法で、両方のアクションを実行できることを確認したいと考えています。したがって、最終的には:いいえ-タイプを伝える必要があります。
これは、XmlIncludeAttribute を使用する必要があるという意味ではないことに注意してください。この情報を XmlSerializer コンストラクター (追加の型) に提供することもできます。ただし、属性アプローチを使用する方がIMOの方が便利であり、「タイピングが少ない」ということは、そのようにしない正当な理由にはなりません。さらに、XmlSerializer(Type) コンストラクター以外のものを使用する場合は、アセンブリのリークを防ぐためにシリアライザーをキャッシュする必要があります。
属性を追加するだけです...