.net アプリでのシリアル化に関するアドバイスを探しています。アプリはデスクトップ/シック クライアント アプリであり、シリアル化は永続化されたドキュメント形式を表します。シリアライザの要件は次のとおりです。
- パブリック プロパティのみではなく、フィールドのシリアル化を許可する必要があります。
- パラメーターなしのコンストラクターを要求してはなりません。
- 一般的なオブジェクト グラフ、つまり DAG だけでなく共有/双方向参照を処理する必要があります。
- フレームワーク クラスで動作する必要があります (例: Serialize Dictionaries)。
現在、上記のすべてをうまく処理する BinaryFormatter を使用していますが、サイズ/パフォーマンスとバージョンの許容範囲が問題です。[OnDeserialized/ing] 属性を使用して互換性を提供していますが、サロゲートなどの複雑な使用なしに大規模なリファクタリング (名前空間の変更など) を行うことはできません。
理想的な解決策は、既存の [NonSerialized] 注釈などで動作する BinaryFormatter のドロップイン置換ですが、パフォーマンスが向上し、より小さくて維持しやすい形式を生成します。
私はさまざまな protobuf の実装を見てきましたが、最近では一般的なオブジェクト グラフ/列挙型/構造体をシリアル化することは可能であるように見えますが、多くのフレームワーク コレクション タイプなどを含む複雑なグラフをシリアル化することは簡単ではないようです。プロパティではなくフィールドで機能させることができますが、すべてのクラスにパラメーターなしのコンストラクターと protobuf 注釈を追加する必要があることを理解しています (ドメインは約 1000 クラスです)。
だから質問:
- 十分に文書化された形式を提供し、パフォーマンスが向上する「代替」のバイナリフォーマッタはありますか?
- プロトコル バッファは、フレームワーク タイプを含む大規模な一般オブジェクト グラフの永続化に適していますか?