我的课程定义如下:
[XmlRoot("ClassName")]
public class ClassName_0
{
//stuff...
}
然后我创建一个ClassName_0列表,如:
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>
谢谢!
答案 0 :(得分:2)
在您的示例中,ClassName不是真正的根。 真正的根是你的清单。所以你必须将列表标记为根元素。 你的类只是一个XmlElement。
答案 1 :(得分:1)
试试这个:
XmlType(TypeName="ClassName")]
public class ClassName_0
{
//stuff...
}
答案 2 :(得分:0)
最后,在Jan Peter的帮助下解决了这个问题。 XmlRoot是放在类上的错误属性。它应该是XmlType。使用XmlType可以实现所需的效果。
答案 3 :(得分:0)
您创建了文档树的根,此根将包含任何对象的列表。
[XmlRootAttribute("myDocument")]
public class myDocument
{
[XmlArrayAttribute]
publict ClassName[] ArrayOfClassName {get;set;}
}
[XmlType(TypeName="ClassName")]
public class ClassName
{
public string stuff {get;set;}
}