Android:试图序列化...忘了注册类型适配器?“ [英] Android: Attempted to serialize ... Forgot to register a type adapter?"

查看:635
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆