对不起,我的英语不好。我和this有同样的问题,但我需要序列化。为了发送帖子到restfull api服务的Android与Retrofit谁帮助我?谢谢
我的问题是,如何使用gson实现自定义序列化?因为我需要序列化这个json。惠特格森。
Json是:
{
"userId": 1,
"IdEncuesta": 1,
"Resultado":
[
{
"NumeroPregunta": 1,
"TipoPregunta":1,
"Respuesta": "Pepito"
},
{
"NumeroPregunta": 2,
"TipoPregunta":2,
"Respuesta": 2
},
{
"NumeroPregunta": 3,
"TipoPregunta":3,
"ListaRespuestas":[
{
"numeroOpcion":1,
"Respuesta": 3
},
{
"numeroOpcion":2,
"Respuesta": 5
},
{
"numeroOpcion":3,
"Respuesta": 2
},
{
"numeroOpcion":4,
"Respuesta": 1
}
]
},
{
"NumeroPregunta": 4,
"TipoPregunta":4,
"ListaRespuestas":[1,3,5]
}
]
}pojo是:
public class RespuestaEncuesta{
@SerializedName("userId")
@Expose
public String userId;
@SerializedName("IdEncuesta")
@Expose
public Integer IdEncuesta;
@SerializedName("Resultado")
@Expose
public List<RespuestaEncuesta.Resultado> Resultado = new ArrayList<RespuestaEncuesta.Resultado>();
public class Resultado {
@SerializedName("NumeroPregunta")
@Expose
public Integer NumeroPregunta;
@SerializedName("TipoPregunta")
@Expose
public Integer TipoPregunta;
@SerializedName("Respuesta")
@Expose
public String Respuesta;
@SerializedName("ListaRespuestas")
@Expose
public List<Integer> ListaRespuestas = new ArrayList<Integer>();
}
}发布于 2016-03-18 23:11:02
{
"userId":1,
"IdEncuesta":1,
"Resultado":[
{
"NumeroPregunta":1,
"TipoPregunta":1,
"Respuesta":"Pepito"
},
{
"NumeroPregunta":2,
"TipoPregunta":2,
"Respuesta":2
},
{
"NumeroPregunta":3,
"TipoPregunta":3,
"ListaRespuestas":[ //ListaRespuestas has a relational object, ok
{
"numeroOpcion":1,
"Respuesta":3
},
{
"numeroOpcion":2,
"Respuesta":5
},
{
"numeroOpcion":3,
"Respuesta":2
},
{
"numeroOpcion":4,
"Respuesta":1
}
]
},
{
"NumeroPregunta":4,
"TipoPregunta":4,
"ListaRespuestas":[ //ListaRespuestas don't have a relational object, where is it ?
1,
3,
5
]
}
]
}这会导致JSON语法异常,我不知道这是否是您的问题,但我发现的错误是这样的。
发布于 2016-03-22 19:21:41
我想那里有比我更好的解决方案。
我在这里做的是为了ListaRespuestas,我将检查第一项是JsonObject还是Integer/Premitive,并根据它读取数据。
try {
RespuestaEncuesta t = gson.fromJson(json, RespuestaEncuesta.class);
for (RespuestaEncuesta.Resultado item : t.Resultado) {
if (item.ListaRespuestas != null) {
JsonElement element = item.ListaRespuestas.get(0);
if (element.isJsonObject()) {//check element/item is JsonObject or Integer
for (int i = 0; i < item.ListaRespuestas.size(); i++) {
JsonObject object = (JsonObject) item.ListaRespuestas.get(i);
//System.out.print(" J Object " + object.get("numeroOpcion").getAsString());
}
} else {
//System.out.println("Json Primitive");
for (int i = 0; i < item.ListaRespuestas.size(); i++) {
JsonPrimitive object = (JsonPrimitive) item.ListaRespuestas.get(i);
//System.out.print(" J Integer " + object.getAsInt());
}
}
}
}
} catch (JsonSyntaxException | JsonIOException | FileNotFoundException e) {
e.printStackTrace();
}https://stackoverflow.com/questions/36087545
复制相似问题