反序列化 XML 包含对象列表到对象列表

本文关键字:对象 列表 包含 XML 反序列化 | 更新日期: 2023-09-27 18:37:07

我正在尝试将对象列表保存到xml文件中。但是当我保存一次时,它会删除保存前的。我的意思是,如果我保存在"雷达"的 xml 文件 1 列表上,而不是保存在"观察者"的保存 xml 文件列表中,它只会保存我保存的最后一个列表。有什么方法可以拯救他们两个吗?我的代码保存:

XmlSerializer serializer = new XmlSerializer(typeof(List<Observer>));
                using (TextWriter writer = new StreamWriter(@"C:'Users'user'Desktop'MapSample'bin'Debug'ListObserver.xml"))
                {
                    serializer.Serialize(writer, list);
                }

希望你能理解。谢谢建议。

编辑:我创建了包含列表作为属性的新对象。现在所有列表都在一个 xml 文件中。对象 :

 [Serializable()]
    public class SaveObject
    {
        public List<Radar> listRadars = new List<Radar>();
        public List<Ikun> listIkuns = new List<Ikun>();
        public List<Observer> listObservers = new List<Observer>();
        public XmlSerializer ser;
        public SaveObject(List<Observer> listObservers, List<Ikun> listIkuns,List<Radar> listRadars)
        {
            this.listIkuns = listIkuns;
            this.listRadars = listRadars;
            this.listObservers = listObservers;
        }
        public SaveObject()
        {
            ser = new XmlSerializer(this.GetType());
        }
    }

序列化函数:

public void Serialize(SaveObject SO)
        {
            if (IfPathToSave) // Select save - not auto ! 
            {
                XmlSerializer serializer = new XmlSerializer(typeof(SaveObject));
                using (TextWriter writer = new StreamWriter(FilePath))
                {
                    serializer.Serialize(writer, SO);
                }
            }
            else // auto save ! 
            {
                XmlSerializer serializer = new XmlSerializer(typeof(SaveObject));
                using (TextWriter writer = new StreamWriter(@"C:'Users'user'Desktop'MapSample'bin'Debug'AutoSave.xml"))
                {
                    serializer.Serialize(writer, SO);
                }
            }
        }

希望它能在某个时候帮助任何人。享受。:)

反序列化 XML 包含对象列表到对象列表

如果您有 2 个列表并以这种方式执行此操作(错误)

var serializer = new XmlSerializer(typeof(List<Observer>));
using (var writer = new StreamWriter(@"C:'Users'user'Desktop'MapSample'bin'Debug'ListObserver.xml"))
    serializer.Serialize(writer, listA);
using (var writer = new StreamWriter(@"C:'Users'user'Desktop'MapSample'bin'Debug'ListObserver.xml"))
    serializer.Serialize(writer, listB);

然后listB将覆盖ListObserver.xml内容。

你可以试试这个

var serializer = new XmlSerializer(typeof(List<List<Observer>>));
using (var writer = new StreamWriter(@"C:'Users'user'Desktop'MapSample'bin'Debug'ListObserver.xml"))
    serializer.Serialize(writer, new List<List<Observer>>(new[] {listA, listB}));

如果它不起作用(无论出于何种原因),则只需创建序列化对象

public class SerializationObject
{
    public List<Observer> ListA {get; set;}
    public List<Observer> ListB {get; set;}
}

并使用它

var serializer = new XmlSerializer(typeof(SerializationObject));
using (var writer = new StreamWriter(@"C:'Users'user'Desktop'MapSample'bin'Debug'ListObserver.xml"))
    serializer.Serialize(writer, new SerializationObject() { ListA = listA, ListB = listB });