反序列化只给我 0 作为值
本文关键字:反序列化 | 更新日期: 2023-09-27 18:33:32
我的问题很简单,当我反序列化这个文件时,所有值都设置为 0。某些代码会更明确。
主类 :
public partial class MainPage : PhoneApplicationPage
{
Elements file = null;
// Constructor
public MainPage()
{
InitializeComponent();
load_map("clxml.xml");
}
public void load_map(string path)
{
// deserialize xmlfile_config_map
XmlSerializer serializer = new XmlSerializer(typeof(Elements));
StreamReader reader = new StreamReader(path);
try
{
file = (Elements)serializer.Deserialize(reader);
}catch(Exception e){
}
MessageBox.Show((file.listObjet[1].id).ToString());
MessageBox.Show((file.listObjet[2].pos_x).ToString());
reader.Close();
}
}
我填写的类:
//[Serializable]
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; }
}
//[Serializable()]
[System.Xml.Serialization.XmlRoot("droot")]
public class Elements
{
[XmlElement("Element")]
public List<Element> listObjet { get; set; }
和 XML 文件:
<Element id="4" pos_x="85" pos_y="43" rot="34"/>
这是这样的线,但我认为问题不是来自这里。
序列化
程序需要 XML 中的元素。尝试将[XmlElement]
更改为 [XmlAttribute]
。
找出反序列化问题的最快方法是还原进程。尝试序列化虚拟对象并验证输出是否正确。
Elements elements = new Elements
{
listObjet = new List<Element>
{
new Element
{
id = 1,
pos_x = 10,
pos_y = 20,
rot = 8
}
}
};
var serializer = new XmlSerializer(typeof(Elements));
string output;
using (var writer = new StringWriter())
{
serializer.Serialize(writer, elements);
output = writer.ToString();
}
// Todo: check output format
我已将id
和pos_x
属性的[XmlElement]
更改为[XmlAttribute]
。这是输出:
<Element id="1" pos_x="10">
<pos_y>20</pos_y>
<rot>8</rot>
</Element>