反序列化只给我 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"/>

这是这样的线,但我认为问题不是来自这里。

反序列化只给我 0 作为值

序列化

程序需要 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

我已将idpos_x属性的[XmlElement]更改为[XmlAttribute]。这是输出:

<Element id="1" pos_x="10">
  <pos_y>20</pos_y>
  <rot>8</rot>
</Element>