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

5

我定义了一个类,如下所示:

[XmlRoot("ClassName")]
public class ClassName_0
{
    //stuff...
}

I then create a list of ClassName_0 like such:

var myListInstance= new List<ClassName_0>();

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

var ser = new XmlSerializer(typeof(List<ClassName_0>));
ser.Serialize(aWriterStream, myListInstance);

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

var ser = new XmlSerializer(typeof(List<ClassName_0>));
var wrapper = ser.Deserialize(new StringReader(xml));

如果我将其序列化为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>

有没有一种方法可以将下面的内容序列化并能够从/到 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>

谢谢!


1
我认为这个链接对你很有用,https://dev59.com/OXRC5IYBdhLWcg3wP-hh - sagar
谢谢提供链接。不幸的是,这是生成的代码,所以我无法创建所需类型的自定义列表并添加所有元素属性。我只能将属性添加到类本身。 - VARAK
4个回答

2
在你的例子中,ClassName并不是真正的根元素。真正的根元素是你的列表。因此,你需要将列表标记为根元素。你的类只是一个XmlElement。

那么在这种情况下,XMLRoot没有任何作用? - VARAK
搞定了。感谢帮助 :) - VARAK
没问题 :) 但如果您能更新您的帖子并附上可工作的代码,可能会对其他人有所帮助 :) - Jan Peter

1

try this :

XmlType(TypeName="ClassName")]
public class ClassName_0
{
    //stuff...
}

0
你创建一个文档树的根节点,这个根节点将包含任何对象的列表。
[XmlRootAttribute("myDocument")]
public class myDocument
{
   [XmlArrayAttribute]
   publict ClassName[] ArrayOfClassName {get;set;}
}

[XmlType(TypeName="ClassName")]
public class ClassName 
{
   public string stuff {get;set;}
}

0
终于解决了,Jan Peter 的帮助很大。XmlRoot 不是应该放在类上的正确属性,而应该是 XmlType。使用 XmlType 可以实现所需的效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接