【问题标题】:How do I get Gson to serialize a list of basic name value pairs?如何让 Gson 序列化基本名称值对列表?
【发布时间】:2012-09-13 08:41:09
【问题描述】:

我正在尝试使用类型适配器和 Gson 序列化 BasicNameValuePairs 列表

ArrayList<BasicNameValuePair> kvp=new ArrayList<BasicNameValuePair>();
kvp.add(new BasicNameValuePair("car","ferrari"));
kvp.add(new BasicNameValuePair("speed","fast"));

这就是我想要的结果

{"car":"ferrari","speed":"fast"}

而不是这个

[{"name":"car","value":"ferrari"},{"name":"speed","value":"fast"}]

【问题讨论】:

    标签: android json serialization gson key-value


    【解决方案1】:

    要根据规范对其进行序列化,您需要创建一个自定义类型适配器来处理通用列表。首先创建将对输出进行正确格式化的类。

    public class KeyValuePairSerializer extends TypeAdapter<List<BasicNameValuePair>> {
    @Override
    public void write(JsonWriter out, List<BasicNameValuePair> data) throws IOException {
        out.beginObject();
        for(int i=0; i<data.size();i++){
            out.name(data.get(i).getName());
            out.value(data.get(i).getValue());
        }
        out.endObject();
    }
    /*I only need Serialization*/
    @Override
    public List<BasicNameValuePair> read(JsonReader in) throws IOException {
        return null;
    }
    }
    

    然后使用自定义 Gson 构建器来使用该类型适配器来创建正确的 JSON 字符串。

        GsonBuilder gsonBuilder= new GsonBuilder();
        gsonBuilder.registerTypeAdapter(KeyValuePairSerializer.class, new KeyValuePairSerializer());
        Gson gson=gsonBuilder.create();
        Logger.e(getClass().getSimpleName(),gson.toJson(kvp, KeyValuePairSerializer.class));
    

    【讨论】:

    • 反序列化函数应该长什么样子?
    • mkyong.com/java/… 这适用于已定义的 JSON 对象。对于匿名用户,您需要执行 sites.google.com/site/gson/… 之类的操作。
    • 注意:registerTypeAdapter 的第一个参数应该是被序列化的类,而不是 Serializer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多