GSONが[〜#〜] only [〜#〜] fields(private、public、protected)を使用するのはなぜですか? GSONにゲッターとセッターのみを使用するように指示する方法はありますか?
一般的に、オブジェクトをシリアライズ/デシリアライズするときは、オブジェクトの状態の正確なコピーになるようにしています。そのため、通常、OOデザインで通常望まれるカプセル化を回避します。カプセル化を回避しないと、まったく同じオブジェクトを持つことができない場合がありますさらに、特定のプロパティにセッターを提供したくない場合を考えてみましょうゲッターとセッターを使用して作業している場合、シリアライズ/デシリアライズはどのように動作する必要がありますか?
GSONにゲッターとセッターのみを使用するように指示する方法はありますか?
未だに。
設計ドキュメント から:
[T]プロパティをサポートするための適切な引数もあります。 Jsonフィールドを示すための代替マッピングとしてプロパティをサポートするために、後のバージョンでGsonを強化する予定です。今のところ、Gsonはフィールドベースです。
Gsonを ゲッターを使用 にパッチすることができます。
アプリでこれがどのように機能するかについてのあいまいな概要は、多くのTypeAdapter
実装があることです。特定の値のようなオブジェクト用と、JavaBeansロジックが機能することがわかっているBeanスタイルオブジェクト用です。次に、GsonBuilder
オブジェクトを作成する前に、これらすべてをGson
にジャムします。
残念ながら、GSONはObject[]
。メソッドパラメータを表すJSONオブジェクトを作成しようとしたときに、主にこれを見ました。そのための回避策は、メソッドを反映するカスタムTypeAdapter
インスタンスを作成することでした。 (つまり、呼び出すメソッドごとに1つのGson
インスタンスを使用することになります...)