gpt4 book ai didi

java - 用于泛型类型的 Gson 自定义反序列化器

转载 作者:行者123 更新时间:2023-11-30 08:13:55 25 4
gpt4 key购买 nike

我有许多实现单一接口(interface)类型的类。我想编写一个自定义反序列化器,以便能够处理必须反序列化的 json 的一些特殊情况。谷歌gson可以做到这一点吗?这是我到目前为止的示例代码:

类别类型:

public class MyClass implements MyInterface {
.......
}

解串器

public class ResponseDeserializer implements JsonDeserializer<MyInterface>
{

private Gson fGson;

public ResponseDeserializer()
{
fGson = new Gson();
}

@Override
public MyInterface deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
String jsonString = json.toString();

if(jsonString.substring(0, 0).equals("["))
{
jsonString = "{ \"parameter\":" + jsonString + "}";
}
return context.deserialize(json, typeOfT);
}
}

注册并调用fromJson方法:

@Override
public <T extends MyInterface> T createResponse(Class<T> responseType)
{
T returnObject = new GsonBuilder().registerTypeAdapter(MyInterface.class, new ResponseDeserializer())
.create().fromJson(getEntityText(), responseType);
return returnObject;
}

感谢您提前提供帮助

最佳答案

首先,registerTypeAdapter() 不是 covariant ;如果要将 TypeAdapter 链接到接口(interface),则必须使用 TypeAdapterFactory。请参阅:How do I implement TypeAdapterFactory in Gson?

其次,为什么你认为[{...},{...},{...}]不是有效的Json?当然是:

{  
"foo":[
{
"type":"bar"
},
{
"type":"baz"
}
]
}

这是键 foo 的映射,是一组对象,具有一个成员变量。 Gson 会自动使用以下 POJO 对其进行反序列化:

public class MyObject {
List<TypedObject> foo;
}

public class TypedObject {
String type;
}

除此之外,如果不知道您的具体 Json 字符串,我无法为您提供更多帮助。不过,这(尤其是第一个链接)应该足以开始。

关于java - 用于泛型类型的 Gson 自定义反序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930980/

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