Сериализация/десериализация двумерного массива - C#

Узнай цену своей работы

Формулировка задачи:

Есть класс:
        [Serializable()]
        public class Location
        {
           //реализация
        }
Есть двумерный массив экземпляров класса:
        private Location[][] location;
        location=new Location[180][];
        for (int i = 0; i < 180; i++)
        {
           location[i] = new Location[114];
           for(int j = 0; j < 114; j++)location[i][j] = new Location(i, j);
        }
Задача: Cериализовать данный массив, периодически повторно сериализовать его в процессе работы программы. При последующем запуске программы десериализовать и так же периодически повторять сериализацию в процессе работы. Сериализация:
        XmlSerializer serializer = new XmlSerializer(typeof(Location[][]));
        System.IO.FileStream writer = new System.IO.FileStream(@"map.xml", System.IO.FileMode.Create);
        System.IO.StreamWriter file = new System.IO.StreamWriter(writer,Encoding.GetEncoding("windows-1251")); 
        serializer.Serialize(file, location);
        writer.Close();
Десериализация:
        XmlSerializer serializer = new XmlSerializer(typeof(Location[][]));
        System.IO.FileStream reader = new System.IO.FileStream(@"map.xml",System.IO.FileMode.Open);
        System.IO.StreamReader file = new System.IO.StreamReader(reader, Encoding.GetEncoding("windows-1251"));
        location=(Location[][])serializer.Deserialize(file);
        reader.Close();
Проблема: При первом запуске программы корректно сериализует массив в файл, корректно обновляет файл. При повторном запуске программы корректно десериализует. НО!!! в процессе работы недописывает файл, обрываясь в прямом смысле на полустрочке. Отладка показывает вход в сериализацию, пропуск всех операций процедуры, идущих после сериализации и вылетание из процедуры. Есть у кого-нибудь идеи, где собака зарыта?
столько просмотров и ни одной версии

Решение задачи: «Сериализация/десериализация двумерного массива»

textual
Листинг программы
private Location[][] location;
        location=new Location[180][];
        for (int i = 0; i < 180; i++)
        {
           location[i] = new Location[114];
           for(int j = 0; j < 114; j++)location[i][j] = new Location(i, j);
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.571 из 5
Похожие ответы