2012-02-07 3 views
3

CustomLineCap не применяет к нему SerializableAttribute.Как сериализовать экземпляр класса CustomLineCap

Я хочу добавить свойство этого типа к графику объекта, который в настоящее время сериализуется/десериализуется с помощью BinaryFormatter.

Я попытался переключиться на сериализацию XML, но у него есть множество дополнительных требований, и я не хочу обманывать этот esp. так как это не мой код; это какой-то открытый исходный код, который я загрузил.

Если есть способ получить BinaryFormatter, чтобы игнорировать собственность, это может сработать.

Я предпочел бы его подклассы; Я просто не знаю, будет ли это работать.

+0

Вы имеете в виду CustomLineCap? Кажется, я не могу найти настоящий класс под названием CustomEndCap. – tyranid

ответ

1

Вы не сможете напрямую сериализовать экземпляр CustomLineCap class. Он происходит от MarshalByRefObject class, и хотя это не показатель того, что он не может быть сериализованным, это почти всегда случай.

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

То есть, я бы рекомендовал использовать в adapter pattern создать оболочку, которая захватывает свойства экземпляра CustomLineCap, которые вы хотите сериализовать, а затем выставить и сериализации что.

Это, как правило, подход, который вы бы хотели использовать с любым классом, который имеет контекст, привязанный к определенному домену, который при сериализации для сохранения за пределами этого домена больше не имеет смысла.

Обратите внимание, что в этом сценарии подклассы также не будут работать, поскольку применение SerializableAttribute к вашему подклассу означает, что все поля (даже частные, у которых у вас нет доступа) будут сериализованы, включая любые которые имеют только контекст в домене приложения, в котором они созданы.

Смежные вопросы