首页 > 解决方案 > Gson 为什么我的反序列化不起作用?

问题描述

我正在尝试制作一个需要使用 json 的 java 程序,我选择 gson 作为我的库来处理管理 JSON

但是当我尝试反序列化我的 jsonmessagereturn.text值和messagereturn.extra.text值都设置为 null 时,我试图解决这个问题,但我无法解决。

我试图反序列化的 json 示例是

{
    "text":"",
    "extra":[{
        "text":"eee joined the game",
        "color":"yellow"
    }]
}

这就是我如何称呼 gson

Message messagepacket = event.<ServerChatPacket>getPacket().getMessage();
//this gets the json data
messagereturn messagereturn =  gson.fromJson(String.valueOf(messagepacket), messagereturn.class);
System.out.println(messagereturn.returnmethod());

这是我也试图反序列化的类

public class messagereturn {
    String text;
        
    public class extra{
        String text;
    }
    
    public String returnmethod() {
        extra extra = new extra();
        return text + extra.text;
    }
}

谢谢,如果需要更多信息,请告诉我,谢谢

标签: javajsongson

解决方案


理解您的 JSON(以及顺便创建 Java 类)存在问题。这些标记[]意味着这是一个列表。

所以你有一个具有属性text、类型Stringextra类型的对象List<Object>

该列表包含另一个对象(请注意,该对象由 定义并由{}列出[])。

列表中的对象还有另外两个属性:text并且color都具有原始类型;String.

所以你的java类应该是这样的:

public class Messagereturn {

    private String text;
    private List<Extra> extra;
    
    //getters and setters and other methods
    
}

和班级Extra

public class Extra {

    private String text;
    private String color;
    
    //getters and setters
}

使用此数据模型,您可以Gson使用这些结构调用您的数据模型。

此外,您不需要调用returnMethod创建Extra对象,它是由Gson.

使用这行代码:

Messagereturn mr = new Gson().fromJson(txt, Messagereturn.class);

而您的 JSON 示例,这是在调试模式下运行时存储的值:

对象

如您所见,来自 JSON 的值已创建并加载到内存中。


推荐阅读