Okだから十分にはっきりしていなかったので質問を編集しました。GSON:カスタムオブジェクトの逆シリアル化
編集2:JSONファイルを更新しました。
私はAndroidアプリケーションでGSONを使用しています。サーバーからのJSONファイルを解析する必要があります。複雑すぎます。私はオブジェクトの構造が重すぎるようには望んでいないので、内容を簡略化したいと思います:私のオブジェクトの構造はJSONファイルの構造ではありません。
例えば、JSONに私はこれがあるとします。
{
"object1":{
"attribute1" : "test1",
"attribute40" : "test40",
"user":{
"id":1,
"name":"foo"
}
,"example":{
"total":10,
"list":[
{
"tag":"tag1",
"name":"object name 1",
"pos":1
},
{
"tag":"tag10",
"name":"object name 10",
"pos":10
}
]
}
}
"object2":{
"attribute1":"test..."
}
}
私はArrayList
が含まれている私の現在のオブジェクト構造、オブジェクトExample
、で保存しないとint
「合計」 。しかし、値が"object name 1;object name 2;..."
の単純なStringだけを残したいと思います。
さらに、完全なユーザーではなくユーザーIDだけを保存したいと思っています。他のサーバーAPI呼び出しで完全なユーザーが既に別の場所に保管されているためです。
だから私のクラスのクラスは次のようになります:
class Foo{
int userId;
String example; //"object name 1;object name 2;..."
...
}
だから私たちは、カスタム・デシリアライザでこれを達成することができることを仮定し、私はどのように見つけることはありません。可能であればメモリを最小限に抑えたいので、完全なオブジェクトの例を持っていないと思って、それを使ってString example
を構築するのは正しい方法です。
最悪の場合、複雑すぎると、サンプルオブジェクトを解析するときに、少なくともタグ項目のリストのみを格納できるようにしたいので、カスタムデシリアライザが必要です。total
。
だから私は持っているでしょう:
class Foo{
int userId;
ArrayList<Tag> example;
...
}
GSONはあなたの特別な要件に応じて過剰です。あなたのドメインモデルのコンストラクタにJSON文字列を渡すだけで、単純な文字列操作を使って、必要なフィールドを分割/抽出します。 – yorkw
確かに解決策かもしれませんが、毎回30個以上のフィールドを持つJSONファイルがたくさんあり、今後この構造が発展するかもしれません。だから、私は仕事とメンテナンスを最小限に抑えるために、GSONのようなライブラリを使うのが好きです。特に、特定のJSONファイルですでに使用している場合は特にそうです。 – Chayy
"構造は将来的に進化するかもしれません"、OOの観点からは、すべてのプロパティを使用していなくても、完全なドメインオブジェクトをモデリングすることを強くお勧めします。 – yorkw