2012-01-15 1 views
2

ファイルにバイナリシリアル化(BinaryFormatter)するいくつかのタイプのプロジェクトがあります。管理者がこれらのファイルをより読みやすいXML形式(たとえば、XmlSerializerを使用)に一時的にデコードできるようにする2番目のプロジェクトを作成したいと思います。タイプを必要とせずにバイナリからXMLシリアル化に変換する

私はそれらを再シリアライズ、その後、元の型のオブジェクトにそれらをデシリアライズできましたが、それがすべての可能な

  • (少なくとも私自身のコード内)のデシリアライゼーションをスキップすること、および
  • より良いですまだ、私のデコーダのツールで型を全く参照する必要はありませんか?
+0

.NETのネイティブバイナリシリアル化を使用していますか? – Groo

+0

はい。私は明確に編集しました。 –

答えて

2

あなたは.NETのネイティブバイナリシリアル(BinaryFormatter)を参照している場合は、問題は、それが文書化されていない形式(私の知る限り)を使用して(逆シリアル化のために必要なすべてのメタデータと一緒に)あなたのオブジェクトを保存していることです。

デシリアライズせずに実際に試してみたい場合は、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/)はデシリアライズせずに要素を反復できるようにすることができますその機能性)。私はチェックする必要があります(または、フィードバックを速めるために別の質問を投稿することもできます)。 – Groo

+0

@SörenKuklauはい、protobuf-netを使ってバイナリにシリアル化すると、後で正確に同じタイプのものは必要ありませんが、もっと簡単で正確なものになります。 protobufはスキーマなしではあいまいであるため(同じデータをさまざまな方法で解釈できます) –

0

少なくとも標準のXMLシリアル化では、その型を指定せずに型を逆シリアル化することはできませんが、オブジェクトがxmlを使用してシリアル化されている限り、多くのXMLリーダークラスオブジェクトを逆シリアル化する必要なしにオブジェクトをトラバースします。また、JSONにシリアライズする場合、匿名型にデシリアライズするライブラリがいくつかあります。

あなたが探している変換のタイプが純粋に美容的(例えば人間が読めるようにする)の場合、要素タグを置き換えるRegExを書くことができます。

+0

"そのタイプを指定せずに自分のタイプにデシリアライズすることはできません。バイナリシリアル化には、ヘッダーに型の名前が含まれているように見えます。私が確信しているのは、完全な構造を理解するのに十分なメタデータが含まれているかどうかです。 –

関連する問題