5

我有一个定义如下的类:

[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>

谢谢!

4

4 回答 4

2

在您的示例中, ClassName 不是真正的根。真正的根是您的列表。所以你必须将列表标记为根元素。您的课程只是一个 XmlElement。

于 2013-07-19T08:13:38.020 回答
1

尝试这个 :

XmlType(TypeName="ClassName")]
public class ClassName_0
{
    //stuff...
}
于 2013-07-19T08:18:43.087 回答
0

最后,在 Jan Peter 的帮助下解决了这个问题。XmlRoot 是放在类上的错误属性。它应该是 XmlType。使用 XmlType 可以达到预期的效果。

于 2013-07-19T08:16:41.007 回答
0

您创建文档树的根,该根将包含任何对象的列表。

[XmlRootAttribute("myDocument")]
public class myDocument
{
   [XmlArrayAttribute]
   publict ClassName[] ArrayOfClassName {get;set;}
}

[XmlType(TypeName="ClassName")]
public class ClassName 
{
   public string stuff {get;set;}
}
于 2016-09-16T06:51:24.287 回答