Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: клас serialisation Добавлено: 14.02.04 20:14  

Автор вопроса:  danser | ICQ: 299287824 

С помощю класа serialisation можно сохранять обекты стандартных класов(например динамический массив), например:

Dim t As New ArrayList()

t.Add("My Object1")

Dim saveFile As FileStream

saveFile = File.Create("c:\objectSave.bin")

Dim formatter As New BinaryFormatter()

formatter.Serialize(saveFile, t)

saveFile.Close()

Все нормально, красиво сохраняет в файле c:\objectSave.bin обект класа ArrayList(). Но если мы попытаемся сохранить обект пользовательского класа (клас находится в том же проекте) то возникет исключение. Возможно я как то не так сделал клас? Как правильно?

Клас:

Public Class Class1

Private a_ As String

Get

a = a_

End Get

Set(ByVal Value As String)

a_ = value

End Set

End Property

End Class

Сохранение пользовательского обекта:

Dim t2 As New Class1()

t2.a = "MyValue"

Dim saveFile As FileStream

saveFile = File.Create("c:\objectSave2.bin")

Dim formatter As New BinaryFormatter()

formatter.Serialize(saveFile, t2)

saveFile.Close()

Ошибка(Исключение):

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

Additional information:
The type Serialisation.Class1 in Assembly Serialisation,
Version=1.0.1473.25999, Culture=neutral, PublicKeyToken=null is not marked as serializable.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 15.02.04 04:02
Для того, чтобы класс мог быть сериализован, он должен быть помечен
атрибутов SerializableAttribute:

<Serializable()> Public Class Class

Ответить

Номер ответа: 2
Автор ответа:
 danser



ICQ: 299287824 

Вопросов: 76
Ответов: 209
 Профиль | | #2 Добавлено: 15.02.04 09:44

Спасибо действует.

Ответить

Номер ответа: 3
Автор ответа:
 danser



ICQ: 299287824 

Вопросов: 76
Ответов: 209
 Профиль | | #3 Добавлено: 15.02.04 19:15

Но возникает непонятка типа: я должен сериализировать все(или почти все) класи которие я розрабативаю- ведь потом мне(или еще кому-нибуть) может захочется сохранить више указаним методом елементи этих класов? Или не сериализировать- но потом придется строить новий клас на основе несириализированого класа(через механизмы наследования)

 

Ответить

Номер ответа: 4
Автор ответа:
 VladDor



Вопросов: 17
Ответов: 47
 Профиль | | #4 Добавлено: 16.02.04 10:10

Для того, чтобы сохранить коллекцию в стримме нужно, как ты и сделал, установить атрибут Serializable. Например у класса HashTable он уже в базовом классе реализован

так, что ни чего делать не надо.Класс ArrayList его не имеет, по этому Павел тебе и посоветовал установить этот атрибут.

Какие интерфейсы имеют базовые классы легко вычисляются в ObjectBrowser - спускайся вниз по дереву класса покуда не дойдешь до IClonable, IDisposable, IDispozable

и д т - енто они и есть.

Ответить

Номер ответа: 5
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #5
Добавлено: 16.02.04 10:45
VladDor, сериализуемые классы реализуют интерфейс ISerializable.
Остальные к делу не относятся.

Ответить

Номер ответа: 6
Автор ответа:
 VladDor



Вопросов: 17
Ответов: 47
 Профиль | | #6 Добавлено: 16.02.04 11:34

Да я то знаю - просто написал где можно разыскать и определить все это дело.

Перечислил все кроме нужного - извините.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам