using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Diagnostics;
namespace ConsoleApplication12 {
[Serializable]
public class ClassA {
public ClassB Ref;
}
[Serializable]
public class ClassB {
public ClassA Ref;
}
class Program {
static void Main(string[] args) {
ClassA a = new ClassA();
ClassB b = new ClassB();
a.Ref = b;
b.Ref = a;
using (MemoryStream stream = new MemoryStream()) {
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, a);
stream.Seek(0, SeekOrigin.Begin);
ClassA a_copy = (ClassA)formatter.Deserialize(stream);
ClassB b_copy = a_copy.Ref;
Trace.Assert(ReferenceEquals(a_copy, b_copy.Ref));
}
Console.ReadLine();
}
}
}
Сериализация (циклический граф объектов)
Столкнулся с проблемой сериализация сложного графа с циклическими ссылками: предположим есть форма, на ней два объекта Panel - Panel1 и Panel2, на каждой есть элементы (какие-нибудь SuperLink), которые могут ссылаться друг на друга. Это выдуманный пример, но проблема у меня совершенно аналогичная.
Каким образом можно сериализовать такой сложный объект? Основная сложность естественно как восстановить ссылки SuperLink'ов друг на друга.
Уже всяко разно пробовал, ничего не получается - единственная мысль отказаться от стандартного сериализатора, и написать свой...
Буду очень благодарен, за любые намеки, ссылки и т.д )
Цитата: GreenRiver
Столкнулся с проблемой сериализация сложного графа с циклическими ссылками
Посмотри алгоритм глубокого копирования объектов.
Для разрешения циклических ссылок используется словарь объектов.
А разве встроенный двоичный сериализатор не справляется с такой задачей?
Код:
Кстати в сторону словаря для объектов я и двигался :)
Большое спасибо! Реально помог! Два дня уже бьюсь... :)