C#在序列化/反序列化XML时更改列表中项目的元素名称

VAR*_*RAK 5 c# xml xml-serialization xml-deserialization

我有一个如下定义的类:

[XmlRoot("ClassName")]
public class ClassName_0
{
    //stuff...
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个ClassName_0列表,如下所示:

var myListInstance= new List<ClassName_0>();
Run Code Online (Sandbox Code Playgroud)

这是我用来序列化的代码:

var ser = new XmlSerializer(typeof(List<ClassName_0>));
ser.Serialize(aWriterStream, myListInstance);
Run Code Online (Sandbox Code Playgroud)

这是我用来反序列化的代码:

var ser = new XmlSerializer(typeof(List<ClassName_0>));
var wrapper = ser.Deserialize(new StringReader(xml));
Run Code Online (Sandbox Code Playgroud)

如果我将它序列化为xml,则生成的xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfClassName_0 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ClassName_0>
        <stuff></stuff>
    </ClassName_0>
    <ClassName_0>
        <stuff></stuff>
    </ClassName_0>
</ArrayOfClassName_0>
Run Code Online (Sandbox Code Playgroud)

有没有办法序列化并能够从/向ClassName_0列表反序列化以下内容?

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfClassName xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ClassName>
        <stuff></stuff>
    </ClassName>
    <ClassName>
        <stuff></stuff>
    </ClassName>
</ArrayOfClassName>
Run Code Online (Sandbox Code Playgroud)

谢谢!

VAR*_*RAK 0

最终在简·彼得的帮助下解决了这个问题。XmlRoot 是放置在类上的错误属性。它应该是 XmlType。使用XmlType就达到了预期的效果。