Я реализую ручную сериализацию, назначая formatter'у surrogate собственного производства. При этом я столкнулся с одной неприятной проблемой.
Возьмем, например, тип Point. В нем определено 3 поля: X, Y и статическое поле Empty. Причем последнее тоже является представителем типа Point с координатами (0,0),а следовательно в свою очередь помимо X и Y содержит Empty... Получается бесконечная рекурсия: в методе GetObjectData среди полей переданного объекта типа Point встречается Empty, для которого еще раз автоматически происходит вызов этого метода, и так далее, пока не заканчивается память =)