反序列化但不添加到以前的 XML

本文关键字:XML 添加 反序列化 | 更新日期: 2023-09-27 17:55:43

关于我的另一个问题,我已经序列化了数据,然后对其进行了反序列化,但是当我将新数据写入反序列化的数组列表时,它不会将新数据添加到数组列表的末尾。相反,它覆盖了以前的列表数据。任何帮助都会很棒。这是我到目前为止的代码:

    {
        ArrayList siteList = new ArrayList();
        ArrayList copy = new ArrayList(siteList);
        //if previous data exists, deserialize it
        try
        {
            ArrayList deserializedArray = DeserializeArray();
            foreach (var item in deserializedArray)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("------");
        }
        catch
        {
            Console.WriteLine("No previous data found");
        }
        siteList.Add("Test 3");
        siteList.Add("Test 4");
        //Display all current items in list
        foreach (var item in siteList)
        {
            Console.WriteLine(item);
        }
        SerializeArray(siteList);
        Console.Read();
    }
    public static void SerializeArray(ArrayList siteList)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(ArrayList));
        TextWriter textWriter = new StreamWriter("SiteList.xml");
        serializer.Serialize(textWriter, siteList);
        textWriter.Close();
    }
    static ArrayList DeserializeArray()
    {
        XmlSerializer deserializer = new XmlSerializer(typeof(ArrayList));
        TextReader textReader = new StreamReader("SiteList.xml");
        ArrayList siteList;
        siteList = (ArrayList)deserializer.Deserialize(textReader);
        textReader.Close();
        return siteList;
    }
}

}

反序列化但不添加到以前的 XML

您从未实际将反序列化数组列表中的数据分配给您稍后尝试更新的变量siteList - 直接分配它:

ArrayList siteList = DeserializeArray();

并更新您的 DeserializeArray() 方法以处理不存在先前 XML 的情况:

static ArrayList DeserializeArray()
{
    if(!File.Exists("SiteList.xml"))
        return new ArrayList();
    XmlSerializer deserializer = new XmlSerializer(typeof(ArrayList));
    TextReader textReader = new StreamReader("SiteList.xml");
    ArrayList siteList = (ArrayList)deserializer.Deserialize(textReader);
    textReader.Close();
    return siteList;
}

通常,使用异常控制流是一个坏主意,尤其是在这种情况下,您可以只检查文件是否存在。

最后一种方法看起来像这样(删除了一些绒毛):

static void Main(string[] args)
{
    ArrayList siteList = DeserializeArray();
    siteList.Add("Test 3");
    siteList.Add("Test 4");
    foreach (var item in siteList)
    {
        Console.WriteLine(item);
    }
    SerializeArray(siteList);
    Console.Read();
}