Как сериализовать два объекта

232
21 декабря 2017, 23:13

Как сериализовать два объекта (Контейнеры)? Пример

class FirstContainer{
   List<First> = new First();
}
class SecondContainer{
   List<Second> = new Second();
}
class First{
   string str;
   public First(string s){
     str = s;
   }
}
class Second{
   First F; // Не должна потеряться ссылка!
   public Second(First f){
      F = f;
   }
}

Как правильно сериализовать два объекта что бы не потерялась ссылка на First?

P.S. Классы наведены для примера

Answer 1

Если вас устраивает бинарная сериализация, то можно использовать класс BinaryFormatter.

Ваш огрызок код даже не компилируется, но, допустим, ошибки исправлены и всё с ним в порядке. Создайте класс-оболочку для ваших двух объектов:

[Serializable]
class Wrapper
{
    public FirstContainer con1 = new FirstContainer();
    public SecondContainer con2 = new SecondContainer();
}

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

Код (де)сериализации элементарен:

var wrapper = new Wrapper();
var formatter = new BinaryFormatter();
using (var stream = new FileStream("test.bin", FileMode.Create))
{
    formatter.Serialize(stream, wrapper);
}
using (var stream = new FileStream("test.bin", FileMode.Open))
{
    wrapper = (Wrapper)formatter.Deserialize(stream);
}

Недостаток этого подхода в том, что не получится обмениваться таким образом данными с другими платформами, кроме .NET.

READ ALSO
ViewModel - одна или несколько вложенных

ViewModel - одна или несколько вложенных

Имеется (c# wpf) окно, в котором динамически показываются разные контролы (фреймы)Набор показываемых контролов определяется в главной vm

225
Построение Master/Slave системы сервисов на базе WCF

Построение Master/Slave системы сервисов на базе WCF

Я понимаю общие принципы Master/Slave, но как это красиво наложить на WCF очень туманно вижу

201
Переопределение функций свойств get/set

Переопределение функций свойств get/set

Задача: слияние узлов XML и классов, где свойства помеченные атрибутом ToXmlAttribute, являются атрибутами Xml (Node Name=""):

432
Почему если в исходном массиве, если последний элемент == 1 не добавляет в новую коллекцию?

Почему если в исходном массиве, если последний элемент == 1 не добавляет в новую коллекцию?

Есть массив из нулей и единиц, мне нужно за один проход по массиву найти сумму единиц до каждого из нулей и результат записать в новую коллекцию,...

205