マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • 以下の様な様々なシリアライザも存在するが、
    ココでは、BinaryFormatter?のバイナリシリアライズのみ取り扱う。
  • System.Runtime.Serialization名前空間のBinaryFormatter?クラスと共に使用する。

詳細

使用例

シリアライズを使用すると、以下のような処理を実装できる。

オブジェクト ⇔ バイト変換

  • オブジェクトをバイトに変換できる。
  • オブジェクトをバイトから復元できる。

オブジェクトのセーブ&ロードや転送

  • ファイルにセーブ&ロードできる。
  • ネットワーク経由で転送できる。

参考

様々なシリアライザ

以下の様なシリアライザも存在する。

バイナリ

  • DataContractSerializer?
  • MsgPackFormatter? - MessagePack?

XML

  • XmlSerializer?
  • DataContractSerializer?

JSON

  • DataContractJsonSerializer?
  • JsonSerializer? - JSON.NET
  • JsonSerializer? - JSON.NET BSON

JSONのparseを色々試してみた。

相互運用性

バージョン間

相互運用性あり

x86, 64間

相互運用性あり(ポインタだけ注意)

net, netcoreapp

以下の検証コードで検証した結果、基本的に相互運用性はありそう。

  • net ⇔ netcoreapp
    Windows上であれば動作する。
  • netcoreapp(on Windows) ⇔ netcoreapp(on Linux)
    netcoreapp同士であれば動作する。
  • net ⇔ netcoreapp(on Linux)
    netcoreapp(on Linux) → netの場合に限り動作しないケースがあった。
    (デシリアライズしたDictionaryにIConvertibleが無いとかそういう例外)。

性能

  • 一般的に遅いとされる。
  • ゲーム業界では、MessagePack?などの、
    POCOシリアライズに特化した高速なシリアライザが開発されている。

参考

性能

実装

相互運用性検証

ProtocolBuffer?MessagePack?

  • クロスプラットフォーム&高性能なシリアライザ
  • 双方とも、JSONのバイナリ版(CBOR)みたいなものだが、少々、思想が異なる。
  • 端的に言うと、
  • ProtocolBuffer?は、
    • gRPC用に設計されている。
    • 運用を見据えるなら Protocol Buffers。
  • MessagePack?は、
    • ビッグデータ用のユーティリティとして設計されている。
    • 手軽に使いたいなら MessagePack?

ProtocolBuffer?

  • Googleによって開発され、主に、gRPCで使用される。
  • Protocol BufferはIDLを使用するので、
    • データの構造化に重きを置いていると言える。
    • クロスプラットフォーム対応が完全になり得る。

MessagePack?

  • serialize/deserializeの速度とデータ長の圧縮をアドバンテージとしている。
  • IDLが無いので、クロスプラットフォームが保証されない部分がある模様。
  • なんとなく、CBOR的(CBORから参照されている)で、
    IETF標準化が提案されたが、下位互換を重視するため
    標準化を拒否した等の、開発のポリシーが読み取れる。
    (開発者がビッグデータ界隈の出身である事を考えると解り易い)。

microsoft.com

  • シリアル化

Tags: :プログラミング, :.NET開発


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-27 (火) 20:15:20 (86d)