私の理解では、シリアライゼーション/デシリアライゼーション手法のほとんどは、リフレクションを使用してオブジェクトを作成し、値を設定または取得します。では、[XmlIgnore]... xml、[Serializable]... バイナリ シリアライゼーション、[JsonPropery]... Json.Net などの属性をクラスで明示的にバインドするのはなぜですか。これらはオブジェクトに関する限り横断的な懸念のようなものなので、オブジェクトの外で同じことを行うことはできませんか?
懸念事項が分離されている場合、ユーザーは、オブジェクト グラフ/ツリーのどの部分をどのコンテキストでどのようにシリアライズ/デシリアライズする必要があるかなどを制御できますか?
シリアライゼーション全体を側面として、つまりクラスの関心の外にするようなフレームワークはありますか?
Edit1:私の要件は次のとおりです。私のアプリケーションは、データを巨大なツリー構造に格納します。顧客の要件は、特定のデータを xml 形式でシリアル化し、データの特定の部分を Json でシリアル化できるようにすることであり (なぜそのような要件が必要なのかわかりません)、ほとんどのデータをレガシー コードとしてバイナリでシリアル化しています。
データの一部を XML 形式で表示する必要があるクラスと、別の部分 (これらは xml データまたはバイナリ シリアル化データの一部である場合もあります) を Json で表示する必要があるクラスがあります。
だから私は解決策を探しています
- クラスは、シリアライゼーション固有の属性を認識する必要はありません。代わりに、シリアライザー フレームワークは、クラスに触れずにシリアライゼーションを簡単に行うための十分なツールを提供できます。
- フレームワークは、私が望んでいたプライベート データとパブリック データの両方を永続化できるようにする必要があります。これは、クラスまたはインスタンスに固有の場合もあれば、あるコンテキストのインスタンスの一部のプロパティに固有の場合もあります。
例えば- SaveTemplate: ツリーの各ブランチからいくつかのノードのみを保存する必要があります
- SaveDocument: ツリーから 1 つのブランチを完全に保存する必要があります
- SavePackage: ツリー全体を保存する必要があります。
- さまざまな目的で、xml、バイナリ、json などのさまざまな形式にシリアル化できるようにする必要があります。
そのため、特定のシリアル化フレームワークを評価して同じことを達成することを計画しています。私は次のことができるJson.Netを見つけました
- xml serializationのように、パブリック プロパティにシリアル化タグを配置する必要はありません。
- Binary Serialization への下位互換性。つまり、バイナリ シリアライゼーション インターフェイスの実装を変更する必要はありません。
- パラメーターのないコンストラクターは必要ありません。
ただし、上記の 2) と 3) で述べた機能はまだ必要です。Json.Net やその他のフレームワークについてはまだ詳しく調べていません。
同じことを達成するのに役立つフレームワークはありますか?