![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Felan |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Че-то поиск не помог...
Есть такой класс:
Ну еще он содержит класс Address:
Соотествественно в программе создаются классы Men и в их коллекции Relatives добавляются другие классы Men. Если один экземпляр Men добавить в Relatives разных других экзепляров Men, например так:
То при вызове метода men1.SaveData объект men4 будет записан два раза. При десериализации, соответственно мы получим что у объектов men2 и men3 будут разные объекты men4 и men4'. Как правильно сделать сериализацию, что бы объект men4 не дублировался? -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||||
|
|||||||
mihryak |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
то, что он дублируется - ещё полбеды, добавь в четвёртому человеку ([зануда mode on]men - множественное число, правильнее будет man[зануда mode off]) в коллекцию первого, и всё вообще перестанет сериализоваться, т.к. xml-сериализация не поддерживает циклических ссылок. в отличие от бинарной - BinaryFormatter
нужно будет ещё пометить классы Men и Address атрибутом [Serializable] в результате все объекты будут в единственном числе
если ссылки односторонние, т.е. наличие ссылки, например, первого человека на второго не подразумевает наличия ссылки второго на первого, то работать будет в то же время, мне почему-то кажется такая система управления ссылками довольно шаткой, впрочем, я не знаю задачу, быть может, всё в порядке |
||||||
|
|||||||
Felan |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
![]() ![]()
Прочитал уже про это... Плохо... Ну в принципе такое возможно. Но бинарная же вроде поддерживает циклические ссылки?
А можно узнать твой вариант? -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||||
|
|||||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
угу, вполне. после десериализации объекты будут в единственном числе. тестовый код это демонстрирует мне в голову приходит единый манагер ссылок, задаваемый человеку при его создании, через который люди получают и обновляют своих relatives т.е. люди отдельно, ссылки отдельно, что-то вроде
в таком случае появится возможность менять механизмы работы с ссылками, не меняя кода, их использующего (например, однонаправленные заменить на двунаправленные), пропадёт вероятность рассинхронизации коллекций ссылок у людей и т.п. но, опять-таки, если в данный момент единственная проблема - сериализация коллекций, то и менять ничего смысла нет, к чему неоправданное усложнение системы?.. |
|||
|
||||
Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Да. Это слишком уже будет для моей задачи...
Спасибо. -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Стоп!
Можно написать свой собственный сериализатор/десериализатор. Мы так и сделали. Поддерживается все и циклы и указатели на один и тот же объект. Добавлено через 1 минуту и 33 секунды Все кстати довольно просто: запоминаем в HashSet<> сериализованные объекты, чтобы не сериализовывать их еще раз... Добавлено через 7 минут и 7 секунд Гы, кстати 2: И без обязательных public конструкторов ![]() -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
mihryak |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
они и при бинарной сериализации не особо нужны
а можно хотя бы в общих чертах описать механизм его работы?
HashSet<?> какого именно типа? object и через Equals/GetHashCode сравнение? |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |