繁体   English   中英

序列化/反序列化自定义对象列表到/从xml时出错

[英]Error serializing/deserializing List of custom objects to/from xml

我有这个课:

using System;
using System.Xml.Serialization;

namespace RPG_Maker_WPF.Models
{
    /// <summary>
    /// Represents a (theoretically) playable character.
    /// </summary>
    public class Actor
    {
        #region Properties

        /// <summary>
        /// The name of this actor.
        /// </summary>
        public string Name
        {
            get { return _name; }
          set { _name = value; }
        }
        private string _name;

        /// <summary>
        /// The second name of this actor.
        /// </summary>
        public string SecondName
        {
            get { return _secondName; }
            set { _secondName = value; }
        }
        private string _secondName;

        public string Description
        {
            get { return _description; }
            set { _description = value; }
        }
        private string _description;

        /// <summary>
        /// The initial level of this actor.
        /// </summary>
        public int InitialLevel
        {
            get { return _initialLevel; }
            set { _initialLevel = value; }
        }
        private int _initialLevel;

        /// <summary>
        /// The maximum level of this actor.
        /// </summary>
        public int MaxLevel
        {
            get { return _maxLevel; }
            set
            { _maxLevel = value; }
        }
        private int _maxLevel;

        #endregion Properties

        public Actor()
        {

        }
    }
}

在另一堂课中,我有一个List<Actor> 现在,我想将此列表反序列化为xml。 我使用以下内容:

[XmlRoot(ElementName = "Database")]
    public class Database
    {
        #region Properties

        [XmlArray("Actors"), XmlArrayItem(typeof(Actor), ElementName = "Actor")]
        public List<Actor> Actors
        {
            get { return _actors; }
            private set { _actors = value; }
        }
        private List<Actor> _actors;

        #endregion properties

        public Database()
        {
            Actors = new List<Actor>();
        }

        public void LoadData()
        {
            Actors.Add(new Actor() { Name = "Test", SecondName = "Testi", InitialLevel = 1, MaxLevel = 44, Description = "Bla" });
            SaveData();

            XmlSerializer serializer = new XmlSerializer(typeof(List<Actor>));
            FileStream fs = new FileStream(ProjectViewModel.CurrentProject.Path + "\\Data\\ActorData.rpgwpfd", FileMode.Open);
            XmlReader reader = XmlReader.Create(fs);

            Actors = (List<Actor>)serializer.Deserialize(fs);
        }

        public void SaveData()
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Actor>));
            string path = ProjectViewModel.CurrentProject.Path + "\\Data\\ActorData.rpgwpfd";
            FileStream fs = new FileStream(path, FileMode.OpenOrCreate);
            serializer.Serialize(fs, Actors);
            fs.Close();
        }
    }
}

我从中得到的xml如下所示:

<?xml version="1.0"?>
<ArrayOfActor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Actor>
    <Name>Test</Name>
    <SecondName>Testi</SecondName>
    <Description>Bla</Description>
    <InitialLevel>1</InitialLevel>
    <MaxLevel>44</MaxLevel>
  </Actor>
</ArrayOfActor>

但是在尝试反序列化xml时,我得到一个异常,说根元素丢失了。 怎么了

此反序列化代码应工作:

        using (var fs = File.OpenRead(ProjectViewModel.CurrentProject.Path + "\\Data\\ActorData.rpgwpfd"))
        {
            var serializer = new XmlSerializer(typeof(List<Actor>));
            Actors = (List<Actor>)serializer.Deserialize(fs);
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM