Проблема с сериализацией.
От: Аноним  
Дата: 12.10.05 17:35
Оценка:
Я реализую ручную сериализацию, назначая formatter'у surrogate собственного производства. При этом я столкнулся с одной неприятной проблемой.

Возьмем, например, тип Point. В нем определено 3 поля: X, Y и статическое поле Empty. Причем последнее тоже является представителем типа Point с координатами (0,0),а следовательно в свою очередь помимо X и Y содержит Empty... Получается бесконечная рекурсия: в методе GetObjectData среди полей переданного объекта типа Point встречается Empty, для которого еще раз автоматически происходит вызов этого метода, и так далее, пока не заканчивается память =)

Подскажите, что делать...
Re: Проблема с сериализацией.
От: Аноним  
Дата: 12.10.05 17:44
Оценка:
А>Подскажите, что делать...

Очевидно, не сериализовывать статические поля.
Re[2]: Проблема с сериализацией.
От: Gross_  
Дата: 12.10.05 18:09
Оценка:
А>Очевидно, не сериализовывать статические поля.

Это слишком грубое решение, статические поля сериализовывать надо, тем более что та же проблема возникла бы, если бы поле было экземплярным.

А не может ли эта проблема быть связана с тем, что свойсто типа Point IsLayoutSequential возвращает true, я посмотрел несколько других классов, у них оно было равно false...
Re[3]: Проблема с сериализацией.
От: Igor Trofimov  
Дата: 12.10.05 18:40
Оценка:
G_>Это слишком грубое решение, статические поля сериализовывать надо

Лично мне это кажется бредом.Процесс сериализации обычно подразумевает сохранение состояния экземпляров. Статические поля не описывают состояния экземпляров.

G_>тем более что та же проблема возникла бы, если бы поле было экземплярным.


Циклы ссылок? Надо экземпляры занумеровывать и, когда второй раз встретился уже сериализованный объект, сохранять информацию о том, что "тут объект, который мы записали под номером 5".

При десериализации придется отдельным проходом восстанавливать такие ссылки.

G_>А не может ли эта проблема быть связана с тем, что свойсто типа Point IsLayoutSequential возвращает true, я посмотрел несколько других классов, у них оно было равно false...


Нет.
Re: Проблема с сериализацией.
От: ie Россия http://ziez.blogspot.com/
Дата: 12.10.05 19:26
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Я реализую ручную сериализацию, назначая formatter'у surrogate собственного производства. При этом я столкнулся с одной неприятной проблемой.


А>Возьмем, например, тип Point. В нем определено 3 поля: X, Y и статическое поле Empty. Причем последнее тоже является представителем типа Point с координатами (0,0),а следовательно в свою очередь помимо X и Y содержит Empty... Получается бесконечная рекурсия: в методе GetObjectData среди полей переданного объекта типа Point встречается Empty, для которого еще раз автоматически происходит вызов этого метода, и так далее, пока не заканчивается память =)


А>Подскажите, что делать...


1. Не сериализовать статик поля. (Допускаю, что тебе ну просто обязательно надо.)
2. Объявить Empty как const и (правильно не сериализовать константы.
... << RSDN@Home 1.1.4 stable rev. 510>>
Превратим окружающую нас среду в воскресенье.
Re[2]: Проблема с сериализацией.
От: ie Россия http://ziez.blogspot.com/
Дата: 12.10.05 20:23
Оценка:
Здравствуйте, ie, Вы писали:

ie>Здравствуйте, <Аноним>, Вы писали:


А>>Я реализую ручную сериализацию, назначая formatter'у surrogate собственного производства. При этом я столкнулся с одной неприятной проблемой.


А>>Возьмем, например, тип Point. В нем определено 3 поля: X, Y и статическое поле Empty. Причем последнее тоже является представителем типа Point с координатами (0,0),а следовательно в свою очередь помимо X и Y содержит Empty... Получается бесконечная рекурсия: в методе GetObjectData среди полей переданного объекта типа Point встречается Empty, для которого еще раз автоматически происходит вызов этого метода, и так далее, пока не заканчивается память =)


А>>Подскажите, что делать...


ie>1. Не сериализовать статик поля. (Допускаю, что тебе ну просто обязательно надо.)

ie>2. Объявить Empty как const и (правильно не сериализовать константы.

Бррр.... иногда во время перерыва в футбольном матче такая чушь рождается, не обращайте внимания.

В ничью скатали, жаль .... этот ЧМ будет без России. Хотя с другой стороны может и к лучшему — можно смотреть в свое удовольствие без всяких растройств...
... << RSDN@Home 1.1.4 stable rev. 510>>
Превратим окружающую нас среду в воскресенье.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.