0

我的问题很简单,当我反序列化这个文件时,所有值都设置为 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"/>

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

4

1 回答 1

4

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

我已更改[XmlElement][XmlAttribute]foridpos_x属性。这是输出:

<Element id="1" pos_x="10">
  <pos_y>20</pos_y>
  <rot>8</rot>
</Element>
于 2013-10-01T15:16:30.860 回答