2012-01-15 4 views
2

У меня есть проект с несколькими типами, которые я двоично-сериализую (BinaryFormatter) в файлы. Теперь я хотел бы создать второй проект, который позволяет администраторам временно декодировать эти файлы в более читаемый формат XML (например, используя XmlSerializer).Преобразование из двоичной в XML-сериализации без необходимости использования типа

Я мог десериализации их в объект исходного типа, то reserialize их, но это вообще возможно

  • пропустить десериализации (по крайней мере, в моем собственном коде), и
  • лучше все же, не нужно ссылаться на тип вообще в моем инструменте декодера?
+0

Вы используете встроенную двоичную сериализацию .NET? – Groo

+0

Да. Я отредактировал, чтобы уточнить. –

ответ

2

Если вы имеете в виду родной бинарной сериализации .NET в (BinaryFormatter), проблема заключается в том, что он сохраняет свой объект (наряду со всеми необходимыми метаданных для десериализации), используя нелегальную формат (AFAIK).

Если вы действительно хотите попробовать сделать это без десериализации, вы можете проверить this article, который, по-видимому, проанализировал его формат (но сам автор заявляет, что он может быть неполным). Но я считаю, что это слишком много неприятностей.

+0

В качестве последующего вопроса: есть ли библиотека, которая позволит мне это сделать? Например, http://code.google.com/p/protobuf-net/ позвольте мне сериализовать в двоичный файл, а затем повторно сериализуем как читаемый человеком * без * типа позже? –

+0

Я знаю, что [protostuff] (http://code.google.com/p/protostuff/) может это сделать, но это java. И я уверен *, что [protobuf.net] (http://code.google.com/p/protostuff/) может позволить вам выполнять итерацию через элементы без десериализации (но не на 100% уверен, как я не использовал что функциональность). Мне нужно будет проверить (или вы можете отправить другой вопрос для более быстрой обратной связи). – Groo

+0

@ SörenKuklau да, если вы сериализуете бинарные файлы с protobuf-net, вы не ** ** нуждаетесь в этом точно таком же типе позже, однако это будет * проще и точнее *, если вы знаете, как это выглядело (не обязательно точно такой же тип), поскольку protobuf является двусмысленным без схемы (вы можете интерпретировать одни и те же данные разными способами). –

0

Там нет никакого способа, которым вы можете десериализацию к вашему типу без указания этого типа, по крайней мере, со стандартным XML сериализацией, однако, до тех пор, пока объект был сериализовать с помощью XML, вы можете использовать один из многих классов чтения XML в пересечь объект без необходимости десериализации. В качестве альтернативы, если вы собираетесь сериализовать JSON, есть некоторые библиотеки, которые будут десериализовать анонимные типы, которые вы можете использовать.

Если тип конверсии, который вы ищете, является чисто косметическим (например, чтобы сделать его более понятным для человека), вы можете написать некоторый RegEx для замены тегов элементов.

+0

«Невозможно десериализовать свой тип без указания типа« Вы уверены? Кажется, что двоичная сериализация содержит имя типа в его заголовке. Я не уверен в том, содержит ли он также достаточное количество метаданных, чтобы понять всю структуру. –

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