gpt4 book ai didi

java - com.google.gson.internal.LinkedTreeMap 无法转换为我的类(class)

转载 作者:IT老高 更新时间:2023-10-28 12:44:52 36 4
gpt4 key购买 nike

我在从 JSON 字符串中获取对象时遇到了一些问题。

我得到了类 Product

public class Product {
private String mBarcode;
private String mName;
private String mPrice;

public Product(String barcode, String name, String price) {
mBarcode = barcode;
mName = name;
mPrice = price;
}

public int getBarcode() {
return Integer.parseInt(mBarcode);
}

public String getName() {
return mName;
}

public double getPrice() {
return Double.parseDouble(mPrice);
}
}

从我的服务器中,我得到一个 JSON 字符串表示形式的 ArrayList<Product>。例如:

[{"mBarcode":"123","mName":"Apfel","mPrice":"2.7"},
{"mBarcode":"456","mName":"Pfirsich","mPrice":"1.1111"},
{"mBarcode":"89325982","mName":"Birne","mPrice":"1.5555"}]

这个字符串是这样生成的:

public static <T> String arrayToString(ArrayList<T> list) {
Gson g = new Gson();
return g.toJson(list);
}

为了找回我的对象​​,我使用了这个函数:

public static <T> ArrayList<T> stringToArray(String s) {
Gson g = new Gson();
Type listType = new TypeToken<ArrayList<T>>(){}.getType();
ArrayList<T> list = g.fromJson(s, listType);
return list;
}

但是调用的时候

String name = Util.stringToArray(message).get(i).getName();

我得到了错误com.google.gson.internal.LinkedTreeMap 无法转换为 object.Product

我做错了什么?看起来它创建了一个 LinkedTreeMaps 列表,但我如何将它们转换为我的产品对象?

最佳答案

在我看来,由于类型删除,解析器无法在运行时获取真正的类型 T。一种解决方法是提供类类型作为方法的参数。

这样的方法可行,当然还有其他可能的解决方法,但我发现这个方法非常简洁明了。

public static <T> List<T> stringToArray(String s, Class<T[]> clazz) {
T[] arr = new Gson().fromJson(s, clazz);
return Arrays.asList(arr); //or return Arrays.asList(new Gson().fromJson(s, clazz)); for a one-liner
}

然后这样调用它:

String name = stringToArray(message, Product[].class).get(0).getName();

关于java - com.google.gson.internal.LinkedTreeMap 无法转换为我的类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27253555/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com