C# 在unity中反序列化XML数组
我正在尝试从XML文档反序列化对象数组。 该文档构建在以下结构中:C# 在unity中反序列化XML数组,c#,unity3d,C#,Unity3d,我正在尝试从XML文档反序列化对象数组。 该文档构建在以下结构中: <?xml version="1.0" encoding="UTF-8"?> <root> <element> ..... </element> <element> ..... </element> </root> 我不确定它是否做得正确。因为我知道,在jso
<?xml version="1.0" encoding="UTF-8"?>
<root>
<element>
.....
</element>
<element>
.....
</element>
</root>
我不确定它是否做得正确。因为我知道,在json中,您无法反序列化数组,必须进行某种“黑客”操作
在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;
}
}
我认为这个链接是一个解决方案,你正在寻找。
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;
}
}