2013-04-11 4 views
0

У меня есть некоторые типы, и мне действительно нужно сериализовать экземпляр этих типов, но они не помечены как сериализуемые, и я не могу их модифицировать. Итак, я ищу спасение памяти с глубоким сбрасыванием памяти. Я попробовал BinaryFormatter и т. Д., Но они также требуют сериализуемого атрибута ...Сериализовать объект «un serializable»

Любые идеи? Не нашли много вещей для моего конкретного случая ...: '(

+1

Используйте другие сериализаторов, которые не требуют 'Serializable' атрибутов, таких как XmlSerializer, JavaScriptSerializer, DataContractSerializer, DataContractJsonSerializer и т.д. – I4V

+0

@EmmanuelIstace, что тип данных вы пытаетесь сериализации? – Alex

+0

Сериализуя что-либо, например. дамп памяти не является проблемой - это десериализация, которая, как правило, является проблемой (если вы ожидаете, что десерилизованная версия будет иметь какое-либо разумное поведение) –

ответ

4

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

+0

Это то, что я не хочу делать ... Дерево объектов действительно огромно и сложно, так или иначе, если нет другого способа сделать это ... –

+0

Если он слишком велик и сложен для извлечения данных в класс для сериализация, как вы можете ожидать, что он будет работать через встроенную сериализацию? –

+0

Вот почему я искал что-то вроде «глубокого дампа памяти», немного похожего на язык без изменений. :/ –

1

[Serializable] не является обязательным для сериализации, и для бинарной сериализации, это не требуется

+0

Действительно, для самой сериализации нет, но мне нужно использовать BinaryFormatter для получения байта [] из моего объекта. –

0

Рассмотрите с использованием protobuf-net:Fast, portable, binary serialization for .NET

Образцы кода:

// write to a file 
Serializer.Serialize(outputStream, person); 

... 

// read from a file 
var person = Serializer.Deserialize<Person>(inputStream); 
+1

Нужный атрибут для класса и поля в соответствии с сайтом: http://code.google.com/p/protobuf-net/wiki/GettingStarted, и я не могу изменить свою модель данных (даже просто добавляя атрибуты). –

+0

@EmmanuelIstace, спасибо за информацию. Я не понимал, что должен быть предложен атрибут. – David

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