Android Gson解析一个带有列表字段的类

时间:2011-11-13 23:30:42

标签: android list generics field gson

我定义了以下类

 public class InfoSesionResponse  {

   EstadoRequest ESTADO;
   List<InfoSesion> infosesion=new ArrayList<InfoSesion>();

 }

EstadoRequest和InfoSesion都是只包含字符串字段的简单类。

EstadoRequest具有CODIGO和DESCRIPCION字符串字段。 InfoSesion有USUARIO,CENTRO和CODIGO String Fields。

我得到以下JSon响应

 {
     "ESTADO":{"CODIGO":"C","DESCRIPCION":"Todo bien"},
     "RESULTADO":[
            {"USUARIO":"Silveira Garc\u00eda, Francisco","CENTRO":"I.E.S. N\u00e9stor     
              Almendros","C_CODIGO":"41701183"}]}

我试图一次性实现所有目标,但我找不到方法

我知道要去实现'List<InfoSesion> infosesion=new ArrayList<InfoSesion>()'我必须指定正确的参数类型......

Type infosesionlistype= new TypeToken<List<InfoSesionResponse>>() {}.getType();
InfoSesionResponse infosesionresponse=gson.fromJson(jsonInfoSesion, infosesionlistype);

以这种方式抱怨我忘记了另一个领域,ESTADO

我可以同时管理这两个吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

我可以同时管理这两个吗?

要创建一个与JSON结构相匹配的Java数据结构,我只需从头开始仔细检查JSON,识别不同的部分,并用Java定义补充。

{                                                     // start object definition
    "ESTADO":                                         //   add reference of following type
    {                                                 //     start object definition
        "CODIGO": "C",                                //       add reference of type String or an enum
        "DESCRIPCION": "Todo bien"                    //       add reference of type String
    },                                                //     end object definition
    "RESULTADO": 
    [                                                 //   add reference to list or array of the following type
        {                                             //     start object definition
            "USUARIO": "Silveira García, Francisco",  //       add String reference
            "CENTRO": "I.E.S. Néstor Almendros",      //       add String reference
            "C_CODIGO": "41701183"                    //       add String or number reference
        }                                             //     end object definition
    ]
}                                                     // end object definition

将注释转换为代码,一步一步:

// start object definition

class Response
{

}

// start object definition
//   add reference of following type
//     start object definition

class Response
{
  State ESTADO;
}

class State
{

}

// start object definition
//   add reference of following type
//     start object definition
//       add reference of type String or an enum
//       add reference of type String
//     end object definition

class Response
{
  State ESTADO;
}

class State
{
  String CODIGO;
  String DESCRIPCION;
}

// start object definition
//   add reference of following type
//     start object definition
//       add reference of type String or an enum
//       add reference of type String
//     end object definition
//   add reference to list or array of the following type
//     start object definition

class Response
{
  State ESTADO;
  List<Result> RESULTADO;
}

class Result
{

}

class State
{
  String CODIGO;
  String DESCRIPCION;
}

// start object definition
//   add reference of following type
//     start object definition
//       add reference of type String or an enum
//       add reference of type String
//     end object definition
//   add reference to list or array of the following type
//     start object definition
//       add String reference
//       add String reference
//       add String or number reference
//     end object definition
// end object definition

class Response
{
  State ESTADO;
  List<Result> RESULTADO;
}

class Result
{
  String USUARIO;
  String CENTRO;
  String C_CODIGO;
}

class State
{
  String CODIGO;
  String DESCRIPCION;
}

行动中的代码:

import java.io.FileReader;
import java.util.List;

import com.google.gson.Gson;

public class GsonFoo
{
  public static void main(String[] args) throws Exception
  {
    Gson gson = new Gson();
    Response response = gson.fromJson(new FileReader("input.json"), Response.class);
    System.out.println(gson.toJson(response));
  }
}

class Response
{
  State ESTADO;
  List<Result> RESULTADO;
}

class Result
{
  String USUARIO;
  String CENTRO;
  String C_CODIGO;
}

class State
{
  String CODIGO;
  String DESCRIPCION;
}