Gson在重构反序列化对象时丢失数据

时间:2015-11-25 20:10:20

标签: java android gson

我真的不知道如何说出这个问题的标题,所以如果有人有更好的标题,请提出建议。我正在尝试编码/解码Sessions的ArrayList,并且每个会话都有一个Shot的ArrayList。我遇到的问题是,当我尝试对Sessions列表进行编码时,Gson并没有为每个会话挖掘Shots数组并编码镜头的ArrayList,但只留下一个空数组:

[  
   {  
      "ANGLE":71.356865,
      "DATE":"2015-11-25-11-02",
      "KEY":62,
      "SHOTS":[  

      ]
   },
   {  
      "ANGLE":75.26292,
      "DATE":"2015-11-25-11-02",
      "KEY":63,
      "SHOTS":[  

      ]
   }
]

会话类

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Session {
    @SerializedName("SHOTS") @Expose
    public ArrayList<Shot> shots;
    @SerializedName("SCORE") @Expose
    public float averageScore;
    @SerializedName("DATE") @Expose
    public String date;
    @SerializedName("KEY") @Expose
    public int pk;
    ...
}

镜头类

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Shot {
    public String identifier;
    @SerializedName("SCORE") @Expose
    public double score;
    @SerializedName("TYPE") @Expose
    public int problem;
    @SerializedName("PROBLEM_STRING") @Expose
    public String problemString;
    ...
}

构建json字符串:

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String json = gson.toJson(sessions);

更新

在进一步研究之后,当我重建对象时数据正在丢失,而不是在我对其进行序列化时。这是我用来反序列化它的代码:

Gson gson = new Gson();
Type type = new TypeToken<ArrayList<Session>>(){}.getType();
sessions = gson.fromJson(sessionsString, type);

更新

经过更多的挖掘,我的数据丢失与Gson的编码/分离无关。我想向谷歌道歉,指责他们。我的问题似乎与AsyncTask有关,我已将其重新发布here

1 个答案:

答案 0 :(得分:0)

首先你确定这个名字吗? 其次,我看到的唯一数组是分数

 "SCORE":[  

  ]

请重新检查json对象或使用实际数据更新它