| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Сериализация List<T> со вложенными листами |
| Автор: Felan 28.8.2009, 22:33 | ||||||
| Че-то поиск не помог... Есть такой класс:
Ну еще он содержит класс Address:
Соотествественно в программе создаются классы Men и в их коллекции Relatives добавляются другие классы Men. Если один экземпляр Men добавить в Relatives разных других экзепляров Men, например так:
То при вызове метода men1.SaveData объект men4 будет записан два раза. При десериализации, соответственно мы получим что у объектов men2 и men3 будут разные объекты men4 и men4'. Как правильно сделать сериализацию, что бы объект men4 не дублировался? |
| Автор: Felan 29.8.2009, 11:09 | ||||||
Прочитал уже про это... Плохо... Ну в принципе такое возможно. Но бинарная же вроде поддерживает циклические ссылки?
А можно узнать твой вариант? |
| Автор: mihryak 29.8.2009, 11:49 | ||
угу, вполне. после десериализации объекты будут в единственном числе. тестовый код это демонстрирует мне в голову приходит единый манагер ссылок, задаваемый человеку при его создании, через который люди получают и обновляют своих relatives т.е. люди отдельно, ссылки отдельно, что-то вроде
в таком случае появится возможность менять механизмы работы с ссылками, не меняя кода, их использующего (например, однонаправленные заменить на двунаправленные), пропадёт вероятность рассинхронизации коллекций ссылок у людей и т.п. но, опять-таки, если в данный момент единственная проблема - сериализация коллекций, то и менять ничего смысла нет, к чему неоправданное усложнение системы?.. |
| Автор: Felan 29.8.2009, 23:41 |
| Да. Это слишком уже будет для моей задачи... Спасибо. |
| Автор: neutrino 31.8.2009, 14:50 |
| Стоп! Можно написать свой собственный сериализатор/десериализатор. Мы так и сделали. Поддерживается все и циклы и указатели на один и тот же объект. Добавлено через 1 минуту и 33 секунды Все кстати довольно просто: запоминаем в HashSet<> сериализованные объекты, чтобы не сериализовывать их еще раз... Добавлено через 7 минут и 7 секунд Гы, кстати 2: И без обязательных public конструкторов |
| Автор: mihryak 31.8.2009, 20:49 | ||||
они и при бинарной сериализации не особо нужны
а можно хотя бы в общих чертах описать механизм его работы?
HashSet<?> какого именно типа? object и через Equals/GetHashCode сравнение? |