Требования
В данной статье мы рассмотрим задачи переноса сложных объектов между процессами и машинами. В наших системах было много мест, где требовалось перемещать большое кол-во бизнес объектов различной структуры, например:
- самозацикленные графы объектов (деревья с back-references)
- массивы структур (value types)
- классы/структуры с readonly полями
- инстансы существующих .Net коллекций (Dictionary, List), которые внутренне используют custom-сериализацию
- большое кол-во инстансов типов, специализированных для конкретной задачи
Речь пойдёт о трёх аспектах, которые очень важны в распределённых кластерных системах:
- скорость сериализации/десериализации
- объём объектов в сериализированном виде
- возможность использовать существующие объекты без надобности “украшения” этих объектов и их полей вспомогательными атрибутами для сериализации