gpt4 book ai didi

java - 使用 gson 反序列化 Value 等对象

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:53 25 4
gpt4 key购买 nike

似乎不可能将 json 字符串反序列化为带有类型参数的类型。

我想写一个这样的函数:

public <T> Value<T> getValue (json, Class<T> clazz) {

// THE PROBLEM: T becomes Object so the resulting
// Value will hold an Object as value
Type type = new TypeToken<Value<T>>() {}.getType();
return gson.fromJson(json, type);
}

一个例子是:

Value<User> value = new Value<User>(
new User("Max", "Hu", new Address("5th Av.","NY")), "infos");

// Works fine
String json gson.toJson(value, new TypeToken<Value<User>>() {}.getType())
// dosen't work
getValue(json, User.class)

对应的类:

class Value<T> {
T value;
String someInfos;
}

class User {
String name;
String lastName;
Address address;
}

class Address {
String street;
String city;
}

我错过了什么吗?

最佳答案

我不知道 GSON 的问题是什么,但很可能是由于 TypeToken 的静态(编译时)性质造成的,它阻止了动态变化(部分是由于 Java 类型删除)。但如果您并非绝对必须为此使用 GSON,Jackson可以轻松支持此用例。

您需要构造参数化的 JavaType (TypeFactory.parametricType(Value.class, clazz)),并将其作为要绑定(bind)的类型。像这样的东西:

ObjectMapper mapper = new ObjectMapper();
Value<User> user = mapper.readValue(json, mapper.getTypeFactory().parametericType(Value.class, User.class));

并且您可以将类似的逻辑封装在方法中。我用它来处理通用类型的请求/响应 bean(即有效负载是通用的;通用部分是基本类型)。

关于java - 使用 gson 反序列化 Value<T> 等对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138753/

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