1

Androidアプリケーション内で解析する必要があるオブジェクトのクラスがいくつかありますが、GSONのおかげですでに非常に簡単に処理しています。しかし、私はより複雑なものを必要とするシナリオに出くわしたばかりで、私が行った読書と実験の量にもかかわらず、私は解決できませんでした.

これは、私が解析に使用しているクラスの 1 つを簡略化した例です。

public class MyClass
{
    public String id;
    public List<String> details;
    public Locations locations;
    public List<Timing> timing;
    public Image image;

    public class Locations {
       public List<Location> destinations;
       public List<Location> past;
    }

    public class Timing {
       public String start;
       public String end;
    }
}

次に、このクラスを含む別のクラスがあります。

public class ResultObject
{
    //These represent the possible return values for a result object.
    public Location location;
    public List<MyClass> myClass;
    public List<OtherClass> otherClass;
}

これらは私のクラスの非常に単純なバージョンですが、ResultObject の JSON バージョンはサーバーから取得され、次のように簡単に解析されます。

Type mapType = new TypeToken<ResultObject>(){}.getType();
result = gson.fromJson(httpResult.stream, mapType);

これはうまく機能し、うまく解析されたオブジェクトを 1 日中取得できます。クラスの階層内の任意のフィールドで予期しない型を受け取ったときに問題が発生し、JSON 解析全体が失敗し、結果が null になります。たとえば、「locations.past」は、本来あるべき完全な JSON オブジェクトではなく、文字列の配列として返される可能性があり、その配列リストが空であるだけでなく、ResultObject 全体が解析エラーで失われます。カスタムデシリアライザーを使用することにあると思われますが、このような階層に触れる例はありません。

このサイズのオブジェクトを解析するときに予期しない型を処理する方法について誰かが良い考えを持っているなら、私はそれを大いに感謝します.

4

1 に答える 1

0

内部クラスの定義を取り除くことをお勧めします。名前空間に問題がある場合は、ネストされた静的クラスを使用してください。Gson を使用したシリアライズとデシリアライズはより簡単になります。

于 2013-02-27T03:31:29.010 に答える