有我的XMl文件:
<?xml version="1.0" encoding="utf-8" ?>
<XnaContent>
<Asset Type="XnaCzyMap.Element[]">
<Element>
<id>5</id>
<pos_x>54</pos_x>
<pos_y>30</pos_y>
<rot>90</rot>
</Element>
<Element>
<id>5</id>
<pos_x>54</pos_x>
<pos_y>165</pos_y>
<rot>90</rot>
</Element>
<Element>
<id>5</id>
<pos_x>54</pos_x>
<pos_y>340</pos_y>
<rot>25</rot>
</Element>
</Asset>
</XnaContent>
我的班级:
public class Element
{
[System.Xml.Serialization.XmlElement("id")]
public int id { get; set; }
[System.Xml.Serialization.XmlElement("pos_x")]
public int pos_x { get; set; }
[System.Xml.Serialization.XmlElement("pos_y")]
public int pos_y { get; set; }
[System.Xml.Serialization.XmlElement("rot")]
public int rot { get; set; }
}
我想将我的XML反序列化为“Element”的集合。当我不使用XNA时,它工作,但它不再工作了。 VS给我以下错误:Error 1 There was an error while deserializing intermediate XML. Cannot find type "XnaCzyMap.Element".
我曾尝试将一个集合添加为类,但也不能正常工作。
[System.Xml.Serialization.XmlRoot("XnaContent")]
public class Elements
{
[XmlElement("Element")]
public List<Element> listObjet { get; set; }
}
使用Xna进行反序列化有什么区别?
执行反序列化的代码:
public void load_map(string path)
{
XmlSerializer serializer = new XmlSerializer(typeof(Element[]));
StreamReader reader = new StreamReader(path);
try
{
file = (Element[])serializer.Deserialize(reader);
}
catch (Exception e)
{
}
reader.Close();
}
当我尝试使用“Elements class”时,我试图用“Elements”切换“Element []”
答案 0 :(得分:0)
Xna不会干扰序列化,但您的代码中存在轻微错误。
您的代码是正确的,但您使用的XML文件格式不正确。如果对XML文件的预期格式有疑问,请尝试使用XmlSerializer的Serialize方法创建预期的格式。
在这种情况下,要使其工作,您必须更改XML文件,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<ArrayOfElement Type="XnaCzyMap.Element[]">
<Element>
<id>5</id>
<pos_x>54</pos_x>
<pos_y>30</pos_y>
<rot>90</rot>
</Element>
<Element>
<id>5</id>
<pos_x>54</pos_x>
<pos_y>165</pos_y>
<rot>90</rot>
</Element>
<Element>
<id>5</id>
<pos_x>54</pos_x>
<pos_y>340</pos_y>
<rot>25</rot>
</Element>
</ArrayOfElement>
注意我是如何更改根标签的。它的名称(ArrayOfElement)对.NET非常重要。
编辑: 如果您想保留原始XML文件,那很好,但您必须更改代码中的多个错误。