C# 如何在不修改类的情况下添加XML序列化指令

C# 如何在不修改类的情况下添加XML序列化指令,c#,vb.net,xml-serialization,C#,Vb.net,Xml Serialization,有没有一种聪明的方法可以在不修改序列化类的情况下添加XML序列化指令 我不喜欢默认的序列化,也不能修改该类。我曾考虑继承该类,并使用Shadows(VB.NET)重新实现属性(使用序列化指令),但这会导致大量重复代码,而且看起来很糟糕 我正在寻找的理想解决方案基本上是一种将所有序列化指令保存在单独文件中的方法。使用反射从类中获取所有属性的值,然后将它们作为属性写入XmlNode PropertyInfo[] properties = control.GetType().GetProperties

有没有一种聪明的方法可以在不修改序列化类的情况下添加XML序列化指令

我不喜欢默认的序列化,也不能修改该类。我曾考虑继承该类,并使用Shadows(VB.NET)重新实现属性(使用序列化指令),但这会导致大量重复代码,而且看起来很糟糕


我正在寻找的理想解决方案基本上是一种将所有序列化指令保存在单独文件中的方法。

使用反射从类中获取所有属性的值,然后将它们作为属性写入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
}

您是否考虑过使用XmlAttributeOverrides

首先,您可以控制和增强DLL中对象的序列化--,即使您无权访问源文件

第二,您可以创建一组可序列化的类,但是可以序列化中的对象 多种方式。例如,不是序列化类的成员 实例作为XML元素,您可以将它们序列化为XML属性, 从而提高了文件的传输效率


这与手工编码(即不使用.NET XmlSerialization)是否几乎相同?关键是,我只想稍微修改一下xml的创建方式,应用不同的名称并强制序列化程序为某些属性创建属性而不是元素。这里有更多信息,否则继承是您唯一的选择。我的建议是,如果向类中添加了一个新属性,则不需要修改任何代码来序列化它。这正是我想要的。谢谢!:)