gpt4 book ai didi

java - 将 JSON 字符串转换为 JAVA 中的通用对象(使用 GSON)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:47 24 4
gpt4 key购买 nike

我有一个返回 JSON 的 Api。响应采用某种格式,可以适合名为 ApiResult 的对象并包含 Context <T>。和一个 int 代码。

ApiResult 以通用方式声明,例如ApiResult<SomeObject>

我想知道如何让 GSON 将传入的 JSON 字符串转换为 ApiResult<T>

到目前为止我有:

Type apiResultType = new TypeToken<ApiResult<T>>() { }.getType();
ApiResult<T> result = gson.fromJson(json, apiResultType);

但这仍然返回将 Context 转换为 LinkedHashMap(我假设它是 GSON 回退到的)

最佳答案

你必须知道 T 会是什么。传入的 JSON 基本上只是文本。 GSON 不知道你想让它成为什么对象。如果您可以从该 JSON 中找到创建 T 实例的线索,则可以执行如下操作:

public static class MyJsonAdapter<X> implements JsonDeserializer<ApiResult<X>>
{
public ApiResult<X> deserialize( JsonElement jsonElement, Type type, JsonDeserializationContext context )
throws JsonParseException
{
String className = jsonElement.getAsJsonObject().get( "_class" ).getAsString();
try
{
X myThing = context.deserialize( jsonElement, Class.forName( className ) );
return new ApiResult<>(myThing);
}
catch ( ClassNotFoundException e )
{
throw new RuntimeException( e );
}
}
}

我正在使用字段“_class”来决定我的 X 需要是什么并通过反射实例化它(类似于 PomPom 的示例)。您可能没有这么明显的字段,但必须有某种方式让您查看 JsonElement 并根据它是什么来决定它应该是什么类型的 X。

此代码是我不久前对 GSON 所做的类似代码的黑客版本,请参见第 184+ 行:https://github.com/chriskessel/MyHex/blob/master/src/kessel/hex/domain/GameItem.java

关于java - 将 JSON 字符串转换为 JAVA 中的通用对象(使用 GSON),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17712052/

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