更改XML序列化的XmlElement名称

我们有以下代码:

[Serializable] public class Class1 { [XmlElement("description")] public string Description { get; set; } } class Program { static void Main(string[] args) { var list = new List {new Class1() {Description = "Desc1"}, new Class1() {Description = "Desc2"}}; var serializer = new XmlSerializer(typeof(List), new XmlRootAttribute("root")); var ms = new MemoryStream(); serializer.Serialize(ms, list); ms.Position = 0; var result = new StreamReader(ms).ReadToEnd(); } } 

执行后,我们将在’result’变量中包含以下内容:

    Desc1   Desc2   

问题是:如何在不更改类名的情况下将xml元素名称从“Class1”更改为“Item1”?

您可以使用XmlTypeAttribute.TypeName

试试这个Class1定义

  [XmlType(TypeName = "Item1")] [Serializable] public class Class1 { [XmlElement("description")] public string Description { get; set; } } 

在类上使用XmlTypeAttribute

 [XmlType(TypeName="ElementName")] [Serializable] public class Class1 { ... 

编辑 :从XmlRootAttribute更新为XmlTypeAttribute 。 前者适用于传递给序列化器的类型是属性类型(此处为Class1 ),但是当存在包装类型(此处为List )时则不行。 XmlType工作原理并不清楚文档(我的重点):

控制XmlSerializer序列化属性目标时生成的XML 架构

感谢Bala R的回答 。