0
class Result {
  private List orders;// Holds objects of class Object only.
  private Number a;
  private Number b;
}

class Order {
  private Number oid;
  private Number status;
}

public class TestClass {
public static void main(String... args){
    String testString = "{\"orders\":[{\"oid\":\"347\",\"status\":\"1\"},{\"oid\":\"348\",\"status\":\"1\"}],\"a\":14.15,\"b\":0}";
    Gson gson = new GsonBuilder().create(); 
    Result res = gson.fromJson( testString, Result.class );
}

クラス結果は変更できません。Jsonにはリストのタイプ情報がなく、Jsonは解析できません。

  1. これらのクラスを変更できないと仮定すると、この問題はどのように解決されますか?異なるタイプのそのようなリストが複数存在する可能性がある場合を考えてみてください。
  2. リストに複数のタイプのオブジェクトが含まれている場合はどうなりますか?
4

1 に答える 1

1

JSON を解析するとき、特定の構造を持つことが期待されます。たとえば、Result オブジェクトには Orders が含まれ、文字列などは含まれないと予想されます。そのため、パーサーは、リストに含めることができるオブジェクトの種類を判断するのに十分なほどインテリジェントでなければなりません。コレクションをパラメータ化しない限り、これを知る方法はありません。すべての Java ジェネリック情報はコンパイル時に消去されると考えられています。本当じゃない。たとえば、Gson はジェネリックを使用して、特定のリスト値を解析する方法を見つけ出します。そのため、GSon パーサーを使用していList<Order>て、さまざまなリスト タイプに問題がない場合。

異なるリスト項目クラスを扱うことは別の問題です。Json データを変更できる場合は、リスト項目ごとに、クラス名とそのフィールドをエンコードできます。データ クラスを絶対に変更できない場合は、json を階層的なキーと値のペアのコレクションとして解釈し、逆シリアル化を自分で行う必要があります。

おそらくこのスレが参考になる

于 2012-06-26T12:05:33.110 に答える