更改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的回答 。