反序列化,但不会增加previous XML [英] Deserializing but not adding to previous xml

查看:180
本文介绍了反序列化,但不会增加previous XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

关于我的其他问题,我有序列化数据,然后反序列化,但是当我写新数据序列化数组列表,它不会将新数据添加到ArrayList的结尾。相反,它是覆盖previous列表数据。任何帮助将是巨大的。这里是我的code迄今:

In relation to my other question, I have serialized data and then deserialized it, but when I write new data to the deserialized arraylist, it does not add the new data to the end of the arraylist. Instead it is overwriting previous list data. Any help would be great. Here's my code so far:

    {
        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;
    }
}

}

推荐答案

您从来没有真正从反序列化的ArrayList中的数据分配给站点列表这是试图将变量以后更新 - 直接分配给它:

You never actually assign the data from the deserialized arraylist to siteList which is the variable that you try to update later - assign it directly:

ArrayList siteList = DeserializeArray();

和更新DeserializeArray()方法来照顾,没有XML之前存在的情况:

and update your DeserializeArray() method to take care of the case that no prior XML exists:

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;
}

在总体上是一个坏主意来控制流量的异常,特别是在这种情况下时,你可以检查文件是否存在。

In general it is a bad idea to control flow with exceptions, especially in this case when you can just check whether the file exists or not.

最后的方法会是这个样子,然后(一些绒毛删除):

The final method would look something like this then (some fluff removed):

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();
}

这篇关于反序列化,但不会增加previous XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆