How do I get Gson to serialize a list of base name pair pairs?

I am trying to serialize a list of BasicNameValuePairs using type adapters and Gson

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

this is the result i want

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

instead of this

 [{"name":"car","value":"ferrari"},{"name":"speed","value":"fast"}] 
+1
source share
1 answer

To serialize this according to the specification, you need to create a custom type adapter that will handle the general list. First create a class that will do the correct formatting in the output.

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

Then use your own Gson creator to use this type of adapter to create the correct JSON string.

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

All Articles