Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2014, 18:32   #1
Slap
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 25
По умолчанию Не работает десериализация класса. Исключение: "обнаружен конец потока до завершения разбора"

Добрый день
Имеется следующий класс
Код:
public class RedBlack : object
    {
            private int intCount;            
            private static RedBlackNode rbTree;
            public RedBlackNode sentinelNode;
            private RedBlackNode lastNodeFound;
            [NonSerialized]
            private Form1 form;
            public RedBlack() { }
            public RedBlack(Form1 reference)
            {
                
                sentinelNode = new RedBlackNode();
                form = reference;
               
                sentinelNode.Left = null;
                sentinelNode.Right = null;
                sentinelNode.Parent = null;
                sentinelNode.Color = RedBlackNode.BLACK;
                rbTree = sentinelNode;
                lastNodeFound = sentinelNode;
            }
//описание методов
}
В главной форме имеются следующие глобальные данные

Код:
RedBlack rb;
        BinaryFormatter formatter;
Задача: сериализовать и десериализовать объекты класса RedBlack.
Код:
//Сериализация
using(var fStream = new FileStream("./Tree.dat", FileMode.Create, FileAccess.Write, FileShare.None))
{
    
    formatter.Serialize(fStream, rb);
}
//десериализация
using (var fStream = File.OpenRead("./Tree.dat"))
            {
                if (fStream != null)
                {
                    RedBlack rb1;
                    rb1 = (RedBlack)formatter.Deserialize(fStream);
                }
            }
После сериализации создаётся файл Tree.dat размером 1Кб. При десериализации появляется исключение: "обнаружен конец потока до завершения разбора". Прошу помочь, с решением проблемы
Slap вне форума Ответить с цитированием
Старый 17.06.2014, 13:52   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Во первых сам класс надо пометить [Serializible]
Причем все классы используемых внутри объектов тоже должны иметь такую же метку .

Вот функции рабочие:

Код:
public void Save(string filename)
        {
            using (Stream stream = File.Open(filename, FileMode.Create))
            {
                using (DeflateStream str = new System.IO.Compression.DeflateStream(stream, CompressionMode.Compress))
                {
                    BinaryFormatter bformatter = new BinaryFormatter();
                    bformatter.Serialize(str, this);
                    str.Close();
                }
                stream.Close();
            }
        }

        public static Settings Load(string filename)
        {
            Settings restored = null;
            using (Stream stream = File.Open(filename, FileMode.Open))
            {
                using (DeflateStream str = new System.IO.Compression.DeflateStream(stream, CompressionMode.Decompress))
                {
                    BinaryFormatter bformatter = new BinaryFormatter();
                    restored = (Settings)bformatter.Deserialize(str);
                    str.Close();
                }
                stream.Close();
            }
            return restored;
        }
Класс Settings на ваш замените. Компрессию можно убрать.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Исключение при дессериализации "обнаружен конец потока до завершения разбора" 6salo6 C# (си шарп) 3 06.02.2012 19:38
МасОС не работает ,хоть и Видит,Интернет и "сломалась" "Сеть" =/ ApxuKILLER Операционные системы общие вопросы 2 05.05.2011 08:22
значения "на конец месяца" перенести на "начало месяца" 0mega Microsoft Office Excel 2 10.05.2010 07:23
Почему не работает Case txt Like "текст1", "текст2" Oooleg Microsoft Office Excel 2 15.07.2009 10:08