私は、Androidアプリケーションでオブジェクトの階層をシリアライズおよびデシリアライズすることに成功しました。GSON逆シリアル化後のオブジェクト構築の完了
一部のオブジェクトのシリアル化は、出力JSONの一部としてシリアル化したくないオブジェクトへの参照であるため、transient
とマークする必要があります(または、別のGSONアノテーションを使用してシリアル化されないようにする)文字列。これらの参照は、他の手段によって別々に構成されなければならないオブジェクトに対するものです。
構造体がJavaオブジェクトにデシリアライズされたら、ある時点でこれらの参照を記入する必要があります。おそらく一連のsetXXX()
タイプのメソッドを使用することでこれを簡単に行うことができますが、それが完了するまで、これらのオブジェクトは不完全な状態になっています。だから私が疑問に思うのは、これに対するより堅牢なアプローチがあるかどうかである。
私がこれまで考えてきた方法:彼らは不完全な状態にしている場合
オブジェクトを持つが
RuntimeException
(またはそれ以上の適当なものを)投げます。つまり、初期化メソッドが呼び出されなかったときに何らかの作業を行うように求められた場合です。シリアライズ可能なビットを別々のデータモデルオブジェクトに分けます。つまり、シリアル化できないものを取り出します。 GSONデシリアライゼーションの後、それらのデータオブジェクトを使用して自分の「実際の」オブジェクトを構築します。これは幾分GSONを使用する利便性を奪うようです。
GSON用のカスタムデシリアライザを作成して、これらのオブジェクトの特殊な作成を処理します。
多くのありがとうございます。 JSONファイルを新しいアプリケーションに読み込むと面倒になることがあります(JSONファイルが新しいアプリケーションに読み込まれると面倒になることがあります)クラス構造が変更されたvesion)。永続化の目的で、アプリケーションクラスを「モデル」クラスのツリーにマッピングすることは、このすべてを解決する良い方法のようです。愚かな質問ですが、実際の作業クラスとデータモデルクラスを区別するために使用する用語は何ですか? – Trevor
ViewModel、PersistenceModel、SerializedModel、JsonModel、IntegrationModel、またはServiceModelなどがあります。 –