Вы не сможете напрямую сериализовать экземпляр класса CustomLineCap
. Он происходит от MarshalByRefObject
класса , и хотя это не показатель того, что не может быть сериализованным, это почти всегда регистр.
Причина в том, что класс MarshalByRefObject
обычно является индикатором того, что производный от него объект имеет контекст только в той области приложения, в которой находится экземпляр. В этом случае вы CustomLineCap
экземпляр - это объект GDI , который имеет какое-либо значение только в том процессе, в котором он живет (он явно привязан к дескриптору).
Тем не менее, я бы порекомендовал использовать шаблон адаптера для создания оболочки, которая захватывает свойства экземпляра CustomLineCap
, который вы хотите сериализовать, а затем выставлять и сериализовать , .
Обычно это тот подход, который вы хотели бы использовать с любым классом, который имеет контекст, связанный с конкретным доменом, который при сериализации сохраняется за пределами этого домена, не имеет смысла больше.
Обратите внимание, что подклассы не будут работать и в этом сценарии, поскольку применение SerializableAttribute
к вашему подклассу означает, что все поля (даже частные, к которым у вас нет доступа) ) будет сериализован, включая любые дескрипторы, которые имеют контекст только в той области приложения, в которой они созданы.