2

シリアル化するカスタム ファイル形式を作成したい .NET 4.0 アプリケーションを作成しています。

  • データ テーブル (大きくなる可能性があります)
  • カスタム クラス (文字列と数値のプロパティ、列挙、およびクラスのリストを含む)
  • 画像

今後、このファイル形式を進化させたいと考えています (プロパティ、画像などを追加することにより)。また、将来モバイル アプリを作成する場合に備えて、Android や iOS などの他のプラットフォームでもこのファイル形式を読み取れるようにする必要があります。

同様の質問をいくつか見てきましたが、ほとんどの解決策は、プロトコル バッファ、JSON、XML、または SQLite のような軽量の SQL RDBMS を使用することを提案しています。

これらの質問であまり見たことがないのは、ライセンスと圧縮のトピックです。アプリケーションを商用製品として配布するので、商用製品に含めることができる .NET ライブラリを使用したいと考えています。また、ファイル形式には大きなデータ テーブルが含まれるため、圧縮率の高い方法が必要になります。

私のニーズに最適なソリューションを見つけるのを手伝ってもらえますか?

前もって感謝します

4

2 に答える 2

2

個人的には、「テーブル」のシリアル化を考えないようにすることをお勧めします。同種の型付けされたエンティティのリストなどの代わりに考えてください。後でいつでもこれらのエンティティにメンバーを追加できます (ほとんどのシリアライザーはそれで問題ありません)。最小限のオーバーヘッドとオープン ライセンスの観点から、私は protobuf-net が妥当な選択であることを謙虚に提出します。これは、Google の「プロトコル バッファ」仕様の実装であり、ネットワーク上で効率的であり、バージョン トレラント (特にメンバーを追加する場合) になるように設計されています。 )。それは圧縮を残します。現在: ワイヤ形式はすでに非常に簡潔であるため (名前ではなくフィールド識別子に数字のみを使用する高密度のバイナリ形式です)、実際には「圧縮」自体は含まれていません。ただしデータがテキスト (長い説明など) で占められている場合は、はい: いくつかのバイトを削減することはまだ可能ですが、シリアライゼーションと圧縮を別々に扱うことでこれを行うことができますGZipStreamStream.NET ではデコレータとして機能できるため、これは通常簡単です。

using(var target = GetTheUndrelyingStream())
using(var zip = new GZipStream(target))
{
    Serializer.Serialize(zip, obj);
}
于 2013-10-25T07:22:55.083 に答える
1

ジュリアン・ヴァン

商業的に使用されるソフトウェア ライセンスを見ると、私の会社は MIT と BSD を好む傾向があります。これらのライセンスは、あまり多くの制限なしに商用利用と配布を許可します。

ライセンスに関するガイドはたくさんありますが、私が適切だと思うガイドは次のとおりです

一般的に言えば、メッセージを JSON でシリアライズする方が XML よりも効率的です。私が商用目的で Newton ライブラリを使用する理由は 3 つあります。高速で、MIT ライセンスがあり、NuGet から入手できます。

ここでチェックしてください: http://json.codeplex.com

それが役立つことを願っています。

于 2013-10-25T07:05:34.507 に答える