c # десериализация не работает? - PullRequest
1 голос
/ 09 мая 2011

У меня есть тестовое консольное приложение, в котором я пытаюсь настроить сериализацию и десериализацию для сохранения данных в 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;
    }
}

}

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Ваш код отлично работает здесь. Я предполагаю, что у вас есть ваш SiteList.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;
    }
}
1 голос
/ 09 мая 2011

Работает нормально (проверено), ваша логика в 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();
    }
}
...