インターフェイスを含むオブジェクトをシリアル化しようとしています。ただし、インターフェイスはシリアル化できません。通常、NonSerialized
タグのようなものを使用しますが、事前定義された .NET クラス (例: ) の 1 つなど、変更できないクラスにこの属性を適用する方法がわかりませんSystem.Diagnostics.Process
。
たとえば、次のコードを考えてみましょう。
using System.Diagnostics
using System.Xml.Serialization;
class Program
{
static void Main(string[] args)
{
try
{
XmlSerializer x = new XmlSerializer(typeof(Process));
}
catch (Exception e)
{
Console.WriteLine(e.InnerException.InnerException.Message);
}
}
}
これにより、次の結果が出力されます。
Cannot serialize member System.ComponentModel.Component.Site of type System.ComponentModel.ISite because it is an interface.
システム クラスなど、変更できないクラスで次のいずれかを行う方法はありますか?
- シリアル化中に子要素を選択的に無視して、子要素がまったくシリアル化されないようにする
- ~と同じことを達成するもので要素をマークする
NonSerialized
リフレクションを使用して、シリアル化するクラスと同じメンバーをすべて含むクラスを動的に生成し、ある種のディープ コピーを実行し、それをシリアル化するなどの解決策を考えました。ただし、リフレクション ルートを生成するクラス以外に、このシリアル化タスクを達成する簡単な方法があるかどうかを知りたいと思っています。