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]ました。これは出力でした:idpos_x

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