首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gson -相同的字段名,不同类型的序列化

Gson -相同的字段名,不同类型的序列化
EN

Stack Overflow用户
提问于 2016-03-18 22:55:03
回答 2查看 1.2K关注 0票数 0

对不起,我的英语不好。我和this有同样的问题,但我需要序列化。为了发送帖子到restfull api服务的Android与Retrofit谁帮助我?谢谢

我的问题是,如何使用gson实现自定义序列化?因为我需要序列化这个json。惠特格森。

Json是:

代码语言:javascript
复制
{
    "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是:

代码语言:javascript
复制
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>();
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-03-18 23:11:02

代码语言:javascript
复制
{  
   "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语法异常,我不知道这是否是您的问题,但我发现的错误是这样的。

票数 1
EN

Stack Overflow用户

发布于 2016-03-22 19:21:41

我想那里有比我更好的解决方案。

我在这里做的是为了ListaRespuestas,我将检查第一项是JsonObject还是Integer/Premitive,并根据它读取数据。

代码语言:javascript
复制
    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();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36087545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档