【问题标题】:de\serialize xml contains lists of object to lists of objectsde\serialize xml 包含对象列表到对象列表
【发布时间】:2015-01-12 08:56:40
【问题描述】:

我正在尝试将对象列表保存到 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);
                }
            }
        }

希望它会在某个时候对任何人有所帮助。享受。 :)

【问题讨论】:

  • 你必须创建一个新的可序列化对象“ObserverCollection”包含你列表的一个属性。
  • 您的意思是创建一个包含少量列表作为属性的对象“SaveObject”吗?
  • 您正在尝试在给定代码中序列化单个 List&lt;Observer&gt;,但提到了另一个列表。您是否尝试将 2 个不同的列表保存到同一个 xml 中?为它们使用不同的文件名或创建更复杂的序列化类型,这将包含两个列表(不确定List&lt;List&lt;Observer&gt;&gt; 是否会这样做,更有可能是)。
  • 我虽然关于将任何列表保存到不同文件 xml 的选项,但我希望它们在同一个文件中。我现在将尝试创建包含列表作为属性的对象保存。你是什​​么意思?你能给我一个例子来将一些列表保存在同一个 xml 文件中吗?
  • 好吧,我成功了。感谢 CodeInNet 的想法。我用灵魂编辑问题

标签: c# xml serialization deserialization


【解决方案1】:

如果你有 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 });

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多