gson 为什么我的反序列化不工作?

bvjveswy  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(235)

我正在尝试制作一个需要使用json的java程序,我选择了gson作为我的库来处理JSON的管理
但是,当我试图反序列化我的json时,messagereturn.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;
    }
}

谢谢,如果还有什么需要的话,请告诉我,谢谢

pgky5nke

pgky5nke1#

理解JSON(顺便创建Java类)有个问题。这些标记[]表示这是一个列表。
所以你有一个属性为text的对象,类型为Stringextra,类型为List<Object>
此列表包含另一个对象(请注意,对象由{}定义,列表由[]定义)。
进入列表的对象有另外两个属性:textcolor,两者都具有基元类型; 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中的值已经被创建并加载到内存中。

相关问题