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

目次

概要

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

詳細

使用例

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

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

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

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

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

参考

様々なシリアライザ

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

バイナリ

XML

  • XmlSerializer?
  • DataContractSerializer?

JSON

  • 純正
    • DataContractJsonSerializer?
    • JsonSerializer? - System.Text.Json
  • その他
    • 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シリアライズに特化した高速なシリアライザが開発されている。

セキュリティ

最近、問題視されてきている模様
(オープンなサービスなどで、不特定多数ユーザから
バイナリデータをインジェクションされるのが脅威)。

参考

パフォーマンス

セキュリティ

詳細はコチラ

実装

相互運用性検証

Protocol BuffersMessagePack

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

Protocol Buffers

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

MessagePack

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

microsoft.com

  • シリアル化

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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-05-17 (月) 17:29:27 (77d)