【发布时间】:2013-01-15 20:27:38
【问题描述】:
我正在尝试序列化包含接口的对象。但是,接口不能序列化。通常,我会使用 NonSerialized 标签之类的东西,但我不知道如何将此属性应用于我无法修改的类,例如预定义的 .NET 类之一(例如: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完成相同的事情标记元素
我想到了一些解决方案,例如使用反射动态生成一个包含与要序列化的类相同的所有成员的类,执行某种类型的深度复制,然后对其进行序列化。但是,我很想知道是否有任何更简单的方法来完成这个序列化任务,而不是去类生成反射路由。
【问题讨论】:
-
既然你使用的是XmlSerializer,你的意思是[XmlIgnore],而不是[NonSerialized],对吧?
-
正确,对于这个特定的例子。我使用 [NonSerialized] 只是为了说明我要完成的工作。是的,[XmlIgnore] 会在这个例子中完成同样的事情。
标签: c# serialization interface nonserializedattribute