Android:试图序列化...忘了注册类型适配器?“ [英] Android: Attempted to serialize ... Forgot to register a type adapter?"
本文介绍了Android:试图序列化...忘了注册类型适配器?“的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用 Gson 将HashMap转换为JSON。
class ClassData {
public String jsonString;
public Class classType;
}
HashMap< String,ClassData> map = new HashMap<>();
void convert(){
new Gson()。toJson(map); //抛出
}
我得到下一个异常
试图序列化java.lang.Class:java.lang.String。忘记
注册一个类型的适配器?
解决方案
您需要实现自己的用于ClassData的自定义序列化程序,然后将其注册到您的Gson Builder。
public class ClassDataSerializerExample {
static class ClassData {
public String jsonString;
public Class classType;
public ClassData(String jsonString,Class classType){
this.jsonString = jsonString;
this.classType = classType;
}
}
static class ClassDataSerializer实现了JsonSerializer< ClassData> {
@Override
public JsonElement serialize(ClassData src,Type typeOfSrc,JsonSerializationContext context){
return new JsonPrimitive(src.jsonString);
public static void main(String [] args){
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(ClassData.class,new ClassDataSerializer());
HashMap< String,ClassData> map = new HashMap<>();
map.put(key,new ClassData(key,String.class));
Gson gson = gsonBuilder.create();
String json = gson.toJson(map);
System.out.println(json);
输出:{key:key}
了解更多: https://sites.google.com/site/gson/gson-user-guide#TOC-Writing-a-Serializer
How to convert HashMap to JSON using Gson.
class ClassData {
public String jsonString;
public Class classType;
}
HashMap<String, ClassData> map = new HashMap<>();
void convert(){
new Gson().toJson(map); // throws
}
I am getting the next exception
Attempted to serialize java.lang.Class: java.lang.String. Forgot to
register a type adapter?
解决方案 You need to implement your own custom serializer for ClassData, and then register it to your Gson Builder.
public class ClassDataSerializerExample {
static class ClassData {
public String jsonString;
public Class classType;
public ClassData(String jsonString, Class classType) {
this.jsonString = jsonString;
this.classType = classType;
}
}
static class ClassDataSerializer implements JsonSerializer<ClassData> {
@Override
public JsonElement serialize(ClassData src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.jsonString);
}
}
public static void main(String[] args) {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(ClassData.class, new ClassDataSerializer());
HashMap<String, ClassData> map = new HashMap<>();
map.put("key", new ClassData("key", String.class));
Gson gson = gsonBuilder.create();
String json = gson.toJson(map);
System.out.println(json);
}
}
Output: {"key":"key"}
Read more: https://sites.google.com/site/gson/gson-user-guide#TOC-Writing-a-Serializer
这篇关于Android:试图序列化...忘了注册类型适配器?“的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文