GSON を使用して、Android アプリケーションでオブジェクトの階層をシリアル化および逆シリアル化することに成功しました。
transient
シリアル化されるオブジェクトの一部には、出力 JSON 文字列の一部としてシリアル化したくないオブジェクトへの参照であるため、マークする必要がある (または別の GSON アノテーションを使用してシリアル化されないようにする) 必要があるメンバーがあります。これらの参照は、別の方法で個別に構築する必要があるオブジェクトへの参照です。
構造がデシリアライズされて Java オブジェクトに戻されると、ある時点でそれらの参照を埋める必要があります。おそらく一連の型メソッドを使用することでこれを簡単に行うことができますsetXXX()
が、それが行われるまで、それらのオブジェクトは不完全な状態になります。したがって、私が疑問に思っているのは、これに対するより堅牢なアプローチがあるかどうかです。
私がこれまでに考えた方法:
RuntimeException
オブジェクトが不完全な状態にある場合は、オブジェクトに (またはより適切なもの) をスローさせます。つまり、初期化メソッドが呼び出されなかったときに何らかの作業を行うように求められた場合です。シリアル化可能なビットを個別のデータ モデル オブジェクトに分離します。つまり、シリアライズできないものを取り出す。GSON デシリアライゼーションの後、構成内のデータ オブジェクトを使用して「実際の」オブジェクトを構築します。これは、GSON を使用する利便性を多少損なうようです。
これらのオブジェクトの特別な作成を処理するために、GSON 用のカスタム デシリアライザーを記述します。