クラスを変更せずにXMLシリアル化命令を追加する方法
-
03-07-2019 - |
質問
直列化されたクラスを変更せずにXML直列化命令を追加する賢い方法はありますか?
デフォルトのシリアル化が気に入らず、クラスを変更できません。クラスを継承し、シャドウ(VB.NET)を使用して(シリアル化命令を使用して)プロパティを再実装することを検討していましたが、多くのコードが重複し、ひどく見えます。
私が探している理想的なソリューションは、基本的にすべてのシリアル化命令を別のファイルに保存する方法です。
解決
XmlAttributeOverridesの使用を検討しましたか?
.NET Frameworkクラスライブラリ:XmlAttributeOverridesクラス
最初に、DLLで見つかったオブジェクトのシリアル化を制御および拡張できます。ソースにアクセスできない場合でも。
2番目に、シリアライズ可能なクラスのセットを1つ作成できますが、オブジェクトをシリアライズします 複数の方法。たとえば、クラスのメンバーをシリアル化する代わりに インスタンスをXML要素として、XML属性としてシリアル化できます。 その結果、より効率的な文書の輸送が可能になります。
他のヒント
リフレクションを使用して、クラスからすべてのプロパティの値を取得し、属性としてXmlNodeに書き込みます
PropertyInfo[] properties = control.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
object o = property.GetValue(control, null);
// write value of o.ToString() out as an attribute on a XmlNode
// where attribute name is property.Name
}
所属していません StackOverflow