序列化中基类字段的自定义XML元素名称

如何在进行序列化时更改从基类inheritance的字段的XML元素名称?

例如,我有下一个基类:

public class One { public int OneField; } 

序列化代码:

 static void Main() { One test = new One { OneField = 1 }; var serializer = new XmlSerializer(typeof (One)); TextWriter writer = new StreamWriter("Output.xml"); serializer.Serialize(writer, test); writer.Close(); } 

我得到了我需要的东西:

   1  

现在我创建了Ainheritance自A新类,并为其添加了字段和自定义XML元素名称:

 public class Two : One { [XmlElement("SecondField")] public int TwoField; } 

序列化代码:

 static void Main() { Two test = new Two { OneField = 1, TwoField = 2 }; var serializer = new XmlSerializer(typeof (Two)); TextWriter writer = new StreamWriter("Output.xml"); serializer.Serialize(writer, test); writer.Close(); } 

结果我得到下一个输出:

   1 2  

问题是我想在不输入基类代码的情况下将此输出中的FirstField更改为FirstField (因为我也将使用它并且名称必须是原始的)。 我怎么能做到这一点?

谢谢。

试试这个:

 public class Two : One { private static XmlAttributeOverrides xmlOverrides; public static XmlAttributeOverrides XmlOverrides { get { if (xmlOverrides == null) { xmlOverrides = new XmlAttributeOverrides(); var attr = new XmlAttributes(); attr.XmlElements.Add(new XmlElementAttribute("FirstField")); xmlOverrides.Add(typeof(One), "OneField", attr); } return xmlOverrides; } } [XmlElement("SecondField")] public string TwoField; } 

并且您的序列化程序初始化更容易:

  var xmls = new System.Xml.Serialization.XmlSerializer(typeof(Two), Two.XmlOverrides); 

这是一个解决方法:覆盖子类中的字段,并使用您需要的任何名称标记overriden字段。 例如,

 class One { public int OneField { get; set; } } class Two : One { [XmlElement("FirstField")] public new int OneField { get { return base.OneField; } set { base.OneField = value; } } }