当前位置: 首页 > 知识库问答 >
问题:

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

于恺
2023-03-14

我真的不知道如何说出这个问题的标题,所以如果有人有更好的标题,请建议。我正在尝试编码/解码会话s的ArrayList,并且每个会话都有一个Shots的ArrayList。我遇到的问题是,当我尝试对会话列表进行编码时,Gson不会深入研究每个会话的Shot数组并对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的编码/解压缩无关。我想向Google道歉,因为我责怪了他们。我的问题似乎与AsyncTask有关,我已经在这里转发了。

共有1个答案

丌官运珧
2023-03-14

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

 "SCORE":[  

  ]

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

 类似资料:
  • 我想在Java中反序列化包含空值的json字符串。我想将对象反序列化为对象。json字符串类似于: 当我反序列化使用 由于对象中的that,我得到一个空指针异常。我如何指示Gson忽略空值的反序列化?

  • 问题内容: 确定,所以我编辑了问题,因为它不够清楚。 编辑2 :更新了JSON文件。 我在Android应用程序中使用GSON,我需要解析来自服务器的JSON文件,这些文件有点太复杂了。我不想让我的对象结构太沉重,所以我想简化内容: 所以我的对象的结构将不是JSON文件的结构。 例如,如果在JSON中,我有以下内容: 我不想保留我当前的对象结构,即一个对象,其中包含一个和一个“总计”。但是我只想将

  • 主要内容:示例我们将一个Java对象序列化为一个Json文件,然后读取该Json文件以获取对象。 在这个例子中,创建一个类。 然后将对象列化后存储在文件中,该文件将具有对象的json表示形式。 示例 在中创建一个名为的Java类文件,参考以下代码 - 执行上面示例代码,得到以下结果 -

  • 我试图将JSON字符串反序列化为Java对象,但遇到以下异常: JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@306A30C7未能对给定类型类java.util.ArrayList的json对象[“93”]进行反序列化 我的主文件: 应该表示JSON的类是: 我尝试了SO上给出的解决方案,但也有

  • 我的目标是让这个电话“只是工作”。

  • 以下代码导致此异常: 所以问题是:如何在GSON序列化和反序列化的泛型HashMap中获得正确的实例?