Сериализация
От: Code  
Дата: 10.11.06 10:28
Оценка:
Ребят, хотел сохранить экземпляр класса в файл и решил воспользоваться бинарной сериализацией.
...
Network net = new Network();
net.LearnAndPredict();

WorkingWithNet Session = new WorkingWithNet();

FileStream str = new FileStream(net.NetName,FileMode.CreateNew,FileAccess.ReadWrite);
BinaryFormatter formater = new BinaryFormatter();

formater.Serialize(str,net);
...
На выполнении последней строки процитированного кода, вылетает ошибка:

An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll

Additional information: Type 'System.IO.FileStream' in Assembly 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.

Объяснить, пожалуйста, что я сделал не так. Файл создается. Библиотека подключил:
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;

Что я сделал неверно?
Re: Сериализация
От: Spender Канада http://rybkov.livejournal.com
Дата: 10.11.06 10:38
Оценка:
Здравствуйте, Code, Вы писали:

C>formater.Serialize(str,net);


C>Что я сделал неверно?


А мне кажется, что
public class Network

не помечен на сериализацию. Вот в этом и проблема...
Re: Сериализация
От: curt_russel  
Дата: 10.11.06 10:57
Оценка:
мда, а интерфейс ISerializable наследуется?

Здравствуйте, Code, Вы писали:

C>Ребят, хотел сохранить экземпляр класса в файл и решил воспользоваться бинарной сериализацией.

C> ...
C> Network net = new Network();
C> net.LearnAndPredict();

C> WorkingWithNet Session = new WorkingWithNet();


C> FileStream str = new FileStream(net.NetName,FileMode.CreateNew,FileAccess.ReadWrite);

C> BinaryFormatter formater = new BinaryFormatter();

C> formater.Serialize(str,net);

C> ...
C>На выполнении последней строки процитированного кода, вылетает ошибка:

C>An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll


C>Additional information: Type 'System.IO.FileStream' in Assembly 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.


C>Объяснить, пожалуйста, что я сделал не так. Файл создается. Библиотека подключил:

C>using System.Runtime.Serialization.Formatters.Binary;
C>using System.Runtime.Serialization;

C>Что я сделал неверно?
Re[2]: Сериализация
От: Code  
Дата: 10.11.06 11:52
Оценка:
Здравствуйте, Spender, Вы писали:

S>Здравствуйте, Code, Вы писали:


C>>formater.Serialize(str,net);


C>>Что я сделал неверно?


S>А мне кажется, что

S>
S>public class Network
S>

S>не помечен на сериализацию. Вот в этом и проблема...

[Serializable]
стоит перед классом. Он должен быть обязательно объявлен как
public
?
Re[2]: Сериализация
От: Code  
Дата: 10.11.06 11:55
Оценка:
Здравствуйте, curt_russel, Вы писали:

_>мда, а интерфейс ISerializable наследуется?


_>Здравствуйте, Code, Вы писали:


C>>Ребят, хотел сохранить экземпляр класса в файл и решил воспользоваться бинарной сериализацией.

C>> ...
C>> Network net = new Network();
C>> net.LearnAndPredict();

C>> WorkingWithNet Session = new WorkingWithNet();


C>> FileStream str = new FileStream(net.NetName,FileMode.CreateNew,FileAccess.ReadWrite);

C>> BinaryFormatter formater = new BinaryFormatter();

C>> formater.Serialize(str,net);

C>> ...
C>>На выполнении последней строки процитированного кода, вылетает ошибка:

C>>An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll


C>>Additional information: Type 'System.IO.FileStream' in Assembly 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.


C>>Объяснить, пожалуйста, что я сделал не так. Файл создается. Библиотека подключил:

C>>using System.Runtime.Serialization.Formatters.Binary;
C>>using System.Runtime.Serialization;

C>>Что я сделал неверно?

А пытаюсь воспользоваться стандартныс сериализатором. Для этого мне обязательно Наследовать интерфейс ISerializable ? Если да, то объяснитьте пожалуйста каким образом это правильно реализовать в самом простом виде.
Re: Сериализация
От: vitz  
Дата: 10.11.06 12:01
Оценка:
Здравствуйте, Code, Вы писали:


C>Additional information: Type 'System.IO.FileStream' in Assembly 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.

Гидето глюбако в нутрях Класса Network (Вашь ведь, правда?) сидит поле с типом System.IO.FileStream (про что вам и указали) пометте это поле атрибутом [NonSerialized] и все должно пройти.
Re[2]: Сериализация
От: Code  
Дата: 10.11.06 12:18
Оценка:
Здравствуйте, vitz, Вы писали:

V>Здравствуйте, Code, Вы писали:



C>>Additional information: Type 'System.IO.FileStream' in Assembly 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.

V>Гидето глюбако в нутрях Класса Network (Вашь ведь, правда?) сидит поле с типом System.IO.FileStream (про что вам и указали) пометте это поле атрибутом [NonSerialized] и все должно пройти.

Огромное спасибо за help, я только начинаю осваивать язык и его принципы взаимодействия с внешней средой и не знал, что поля FileStream нельзя сериализовывать. Скажите пожалуйста, а где можно узнать про список сериализуемых и несериализуемых классов, чтобы не попасть на такой подводный камень?
Re[3]: Сериализация
От: vitz  
Дата: 10.11.06 12:41
Оценка:
Здравствуйте, Code, Вы писали:

C>Огромное спасибо за help, я только начинаю осваивать язык и его принципы взаимодействия с внешней средой и не знал, что поля FileStream нельзя сериализовывать. Скажите пожалуйста, а где можно узнать про список сериализуемых и несериализуемых классов, чтобы не попасть на такой подводный камень?

Если у вас установлен MSDN то там в описании класса присутствует часть его декларации в которой указаны
Атрибуты
Интерфейсы реализуемые классом и предок (наследоваение)
и т.д. типа

[ComVisibleAttribute(true)] 
public class FileStream : Stream

Re[4]: Сериализация
От: Code  
Дата: 10.11.06 14:08
Оценка:
Здравствуйте, vitz, Вы писали:

V>Здравствуйте, Code, Вы писали:


C>>Огромное спасибо за help, я только начинаю осваивать язык и его принципы взаимодействия с внешней средой и не знал, что поля FileStream нельзя сериализовывать. Скажите пожалуйста, а где можно узнать про список сериализуемых и несериализуемых классов, чтобы не попасть на такой подводный камень?

V>Если у вас установлен MSDN то там в описании класса присутствует часть его декларации в которой указаны
V>Атрибуты
V>Интерфейсы реализуемые классом и предок (наследоваение)
V>и т.д. типа

V>

V>

V>[ComVisibleAttribute(true)] 
V>public class FileStream : Stream
V>

Да, установлен. А какой атрибут или свойство отвечает за это качество (сериализовываемость))?
Re[5]: Сериализация
От: vitz  
Дата: 10.11.06 14:16
Оценка:
Здравствуйте, Code, Вы писали:

[Serializable]
Re[6]: Сериализация
От: Code  
Дата: 10.11.06 14:51
Оценка:
Здравствуйте, vitz, Вы писали:

V>Здравствуйте, Code, Вы писали:


V>[Serializable]


Все нениальное — просто. Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.