Вы не сможете напрямую сериализовать экземпляр CustomLineCap
class. Он происходит от MarshalByRefObject
class, и хотя это не показатель того, что он не может быть сериализованным, это почти всегда случай.
Причина, заключающаяся в том, что класс MarshalByRefObject
обычно является индикатором того, что объект, происходящий от него, имеет только контекст в домене приложения, в котором находится экземпляр. В этом случае вы представляете CustomLineCap
экземпляр GDI object, который имеет только смысл в процессе, в котором он живет (он явно привязан к дескриптору).
То есть, я бы рекомендовал использовать в adapter pattern создать оболочку, которая захватывает свойства экземпляра CustomLineCap
, которые вы хотите сериализовать, а затем выставить и сериализации что.
Это, как правило, подход, который вы бы хотели использовать с любым классом, который имеет контекст, привязанный к определенному домену, который при сериализации для сохранения за пределами этого домена больше не имеет смысла.
Обратите внимание, что в этом сценарии подклассы также не будут работать, поскольку применение SerializableAttribute
к вашему подклассу означает, что все поля (даже частные, у которых у вас нет доступа) будут сериализованы, включая любые которые имеют только контекст в домене приложения, в котором они созданы.
Вы имеете в виду CustomLineCap? Кажется, я не могу найти настоящий класс под названием CustomEndCap. – tyranid