我正在尝试反序列化XML文档中的对象数组。在以下结构中构建的文档:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<element>
.....
</element>
<element>
.....
</element>
</root>
但由于某些原因,我有很多问题这样做。这是我的函数,我调用它来反序列化它:
public static CardModel[] Load(string text)
{
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "root";
xRoot.IsNullable = true;
XmlSerializer serializer = new XmlSerializer(typeof(CardModel[]),xRoot);
StringReader reader = new StringReader(text);
CardModel[] o = serializer.Deserialize(reader) as CardModel[];
reader.Close();
return o;
}
我不确定它做得是否正确。因为我知道在json中无法反序列化数组,必须进行某种“hack”。
在CardModel类(它是数组的元素)中,我在类的上方使用标记[xmlroot(“root”)]。我也尝试过使用[XMLRoot(“Element”)],但仍然卡住了。
Afaik不能直接反序列化为数组,但需要一个包装类,如
[Serializable]
[XMLRoot("root")]
public class Root
{
// This does the magic of treating all "element" items nested under the root
// As part of this array
[XmlArray("element")]
public CardModel[] models;
}
而是反序列化成类似的
public static CardModel[] Load(string text)
{
// I don't think that you need the attribute overwrite here
var serializer = new XmlSerializer(typeof(Root));
using(var reader = new StringReader(text))
{
var root = (Root) serializer.Deserialize(reader);
return root.models;
}
}