c# 反序列化不起作用

本文关键字:不起作用 反序列化 | 更新日期: 2023-09-27 17:55:20

我有一个测试控制台应用程序,我正在尝试在其中获取序列化和反序列化以将数据存储到 xml 文件中。序列化方法工作正常,但反序列化似乎不起作用。它不会产生任何错误,但它不会从.xml文件加载我的数据。有人知道为什么吗?

class Program
{
    static void Main(string[] args)
    {
        ArrayList siteList = new ArrayList();
        DeserializeArray();
        siteList.Add("Test 1");
        siteList.Add("Test 2");
        foreach (var item in siteList)
        {
            Console.WriteLine(item);
        }
        SerializeArray(siteList);
        if (siteList.Contains("Test 2"))
        {
            Console.WriteLine("Test 2 exists!");
            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;
    }
}

}

c# 反序列化不起作用

工作正常(经过测试),您在Main()中的逻辑已关闭 - 您必须在反序列化之前先序列化,请尝试以下操作:

static void Main(string[] args)
{
    ArrayList siteList = new ArrayList();
    siteList.Add("Test 1");
    siteList.Add("Test 2");
    foreach (var item in siteList)
    {
        Console.WriteLine(item);
    }
    SerializeArray(siteList);
    siteList = DeserializeArray();
    if (siteList.Contains("Test 2"))
    {
        Console.WriteLine("Test 2 exists!");
        Console.Read();
    }
}

你的代码在这里工作正常。我假设您有上次运行的站点列表.xml因为您首先要反序列化。为了清楚起见,我添加了 Console.WriteLine 来转储反序列化的数据。

class Program
{
    static void Main(string[] args)
    {
        ArrayList siteList = new ArrayList();
        ArrayList deserealizedArray = DeserializeArray();
        foreach (var item in deserealizedArray)
        {
            Console.WriteLine(item);
        }
        Console.WriteLine("---");
        siteList.Add("Test 1");
        siteList.Add("Test 2");
        foreach (var item in siteList)
        {
            Console.WriteLine(item);
        }
        SerializeArray(siteList);
        if (siteList.Contains("Test 2"))
        {
            Console.WriteLine("Test 2 exists!");
            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;
    }
}