C# 更改XML序列化的XmlElement名称

C# 更改XML序列化的XmlElement名称,c#,.net,xml,serialization,C#,.net,Xml,Serialization,我们有以下代码: [Serializable] public class Class1 { [XmlElement("description")] public string Description { get; set; } } class Program { static void Main(string[] args) { var list = new List<Class1> {new Class1() {Description

我们有以下代码:

[Serializable]
public class Class1
{
    [XmlElement("description")]
    public string Description { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        var list = new List<Class1> {new Class1() {Description = "Desc1"}, new Class1() {Description = "Desc2"}};
        var serializer = new XmlSerializer(typeof(List<Class1>), new XmlRootAttribute("root"));
        var ms = new MemoryStream();
        serializer.Serialize(ms, list);
        ms.Position = 0;
        var result = new StreamReader(ms).ReadToEnd();
    }
}
[可序列化]
公共班级1
{
[XmlElement(“描述”)]
公共字符串说明{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var list=new list{new Class1(){Description=“Desc1”},new Class1(){Description=“Desc2”};
var serializer=新的XmlSerializer(typeof(List),新的XmlRootAttribute(“root”);
var ms=新内存流();
serializer.Serialize(ms,list);
ms.Position=0;
var result=新的StreamReader(ms).ReadToEnd();
}
}
执行后,我们将在“结果”变量中包含以下内容:

<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Class1>
    <description>Desc1</description>
  </Class1>
  <Class1>
    <description>Desc2</description>
  </Class1>
</root>

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

在类上也使用:

[XmlType(TypeName="ElementName")]
[Serializable]
public class Class1 { ...
编辑:从
XmlRootAttribute
更新为
XmlTypeAttribute
。前者适用于传递给序列化程序的类型是属性类型的情况(此处为
Class1
),但不适用于有包装类型的情况(此处为
List
)。文档中不清楚
XmlType
是否有效(我的重点是):

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

归功于Bala R's。

您可以使用它

为您尝试一下
Class1
definition

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

我认为XmlElementAttribute不能应用于类。
[AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue,AllowMultiple=true)]公共类XmlElementAttribute:Attribute
并且没有任何
AttributeTargets.class
System.Xml.Serialization.XmlElementAttribute具有AttributeUsage:Field | Parameter | Property | ReturnValue,但不具有Type@TheOtherGuy... 它应该,看看上面的样品。。。但是这个
列表
把事情搞砸了。有没有办法根据属性名生成动态名称?(即:不使用[XmlElement(“description”)]来生成一些动态代码,比如CurrentName.ToLowerCase()),而使用description来生成动态名称?有没有办法根据属性名生成动态名称?(即:不是让[XmlElement(“description”)]有一些动态代码,比如CurrentName.ToLowerCase()),而是让description成为description?