none
Проблема с сериалиацией объекта RRS feed

  • Вопрос

  • Как сериализовать (записать в фаил) объект с переменной , представляющей из себя двухмерный массив,когда пробую это сделать выдает слудующее : "Возникла ошибка при отражении типа "ConsoleApplication1.Test[]"".
    Вот текст программы : 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml.Serialization;
    using System.IO;

    namespace ConsoleApplication1
    {
    [Serializable()]
    public class Test
    {
    public string Name;
    public int Age;
    public int[,] p = new int[2,2];
    public Test() { }
    public Test(string name, int age, int p0,int p1,int p2,int p3)
    {
    Name = name;
    Age = age;
    p[0,0] = p0;
    p[0,1] = p1;
    p[1,0] = p2;
    p[1,1] = p3;
    }
    }
    class Program
    {
    static void Main(string[] args)
    {
    Test[] a = new Test[2];
    a[0] = new Test("Вася",19,10,9,8,7);
    a[1] = new Test("Ваня",17,7,8,9,10);
    //Создадим обьект класса XmlSerializer, для выполнения сериализации обьекта(в скобачках тип сеарилизованых данных)
    XmlSerializer writerRw = new XmlSerializer(typeof(Test[]));
    //создадим обьект класса StreamWriter, для того, что бы записать в файл данные
      StreamWriter fileRw = new StreamWriter("C:\\test.dt");
    //Выполним сериализацию
    writerRw.Serialize(fileRw, a);
    //кеп)) закроем файл
    fileRw.Close();
    }
    }
    }

Ответы

  • XmlSerializer не поддерживает многомерные массивы. Перепишите код на использование jagged arrays - [][]
    • Предложено в качестве ответа YatajgaModerator 6 мая 2013 г. 13:55
    • Помечено в качестве ответа YatajgaModerator 6 мая 2013 г. 15:56
  •         static void Main(string[] args)
            {
                var a = new Test[2];
                a[0] = new Test("Вася", 19, 10, 9, 8, 7);
                a[1] = new Test("Ваня", 17, 7, 8, 9, 10);
                var binaryFormatter = new BinaryFormatter();
                using (Stream stream = new FileStream("C:\\test.dt", FileMode.OpenOrCreate))
                {
                    binaryFormatter.Serialize(stream, a);
                }
    
                using (Stream stream = new FileStream("C:\\test.dt", FileMode.Open))
                {
                    var b = binaryFormatter.Deserialize(stream) as Test[];
                    foreach (var test in b)
                    {
                        Console.WriteLine(test.Name);
                    }
                }
            }
    


    • Предложено в качестве ответа YatajgaModerator 6 мая 2013 г. 13:55
    • Помечено в качестве ответа YatajgaModerator 6 мая 2013 г. 15:56

Все ответы