如何让Gson序列化基本名称值对列表?

时间:2012-09-20 22:27:18

标签: android json serialization gson key-value

我正在尝试使用类型适配器和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"}]

1 个答案:

答案 0 :(得分:2)

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

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));