Как сделать сериализуемый класс без атрибута Serializable в .net - PullRequest
3 голосов
/ 17 марта 2010

У меня есть один визуализатор отладчика для просмотра списка объектов класса в виде таблицы данных. Но ограничением для кода является то, что класс должен быть сериализуемым, то есть должен быть помечен как [Serializable], а если класс не помечен как Serializable, то происходит отладчик. Итак, кто-нибудь может сказать мне, как сделать класс Serializable во время выполнения, если класс не помечен как Serializable.

Ответы [ 5 ]

3 голосов
/ 17 марта 2010

Вы не можете изменять метаданные существующего класса во время выполнения.

2 голосов
/ 01 апреля 2010

Если класс не помечен [Serializable], вы можете попробовать сериализацию, используя SerializationSurrogate

2 голосов
/ 17 марта 2010

Факт отсутствия класса [Serializable] можно объяснить двумя способами. Это может быть ошибка упущения, более распространенный случай. Или класс может просто не поддерживать сериализацию. Что не является необычным, классы часто зависят от состояния, которое невозможно точно воспроизвести во время десериализации, потому что это зависит от глобального состояния программы. Любой из элементов управления Windows Forms был бы хорошим примером, их нельзя десериализовать, не имея собственного окна Windows, которое находится в требуемом состоянии, состоянии, которое часто требует создания других окон (например, окна контейнера) и много сообщений.

Ну, это не поможет вам реализовать ваш визуализатор. Вы не можете надежно реализовать это с сериализацией. Однако использование отражения дает вам доступ к тем же свойствам и значениям полей. И отражение всегда поддерживается.

2 голосов
/ 17 марта 2010

Любой класс с общедоступными свойствами get / set является XmlSerializable. Можно ли вместо этого использовать XML-сериализаторы?

1 голос
/ 17 марта 2010

Вы могли бы взглянуть на свой вопрос по-другому, используя [Serializable], который позволяет вам использовать библиотеки dotnet для сериализации в json, xml и т. Д. Вы все еще можете сериализовать, написав свои собственные методы, чтобы сделать это практически по существу любой структурой данных быть представленным в формате xml или json.

Добавление [Сериализуемый] к классам является одним из лучших советов в блестящей книге Билла Вагнера Эффективный C #: 50 конкретных способов улучшить ваш C # .

Вы можете сериализовать класс без его [Serializable], как @Darin (+1) указал, что вы не можете ретроспективно перекраивать класс. На вашем месте я бы добавил [Serializable], так как обходить это не стоит усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...