2015-09-13 4 views
4

У меня есть POJO, как это который я сериализации JSON с помощью GSON:Сериализовать POJO для JSON с разными именами с помощью GSON?

public class ClientStats { 

    private String clientId; 
    private String clientName; 
    private String clientDescription; 

    // some more fields here 


    // getters and setters 

} 

Вот как я это делаю:

ClientStats myPojo = new ClientStats(); 

Gson gson = new Gson(); 
gson.toJson(myPojo); 

Теперь мой JSON будет выглядеть следующим образом:

{"clientId":"100", ...... } 

Теперь мой вопрос: есть ли способ создать собственное имя для clientId вместо изменения имени переменной clientId? Есть ли какая-либо аннотация в Gson, которую я могу использовать здесь поверх переменной clientId?

Я хочу что-то вроде этого:

{"client_id":"100", ...... } 

ответ

10

Вы можете использовать @SerializedName ("client_id")

public class ClientStats { 

    @SerializedName("client_id") 
    private String clientId; 
    private String clientName; 
    private String clientDescription; 

    // some more fields here 


    // getters and setters 

} 

Edit:

Вы также можете использовать это, что изменение все поля в общем виде

Gson gson = new GsonBuilder() 
    .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) 
    .create() 
1

шаг вперед, чтобы написать сериалайзер, реализующий GSON сериалайзер JsonSerializer:

import com.google.gson.JsonSerializer; 

public class ClientStatsSerialiser implements JsonSerializer<ClientStats> { 

@Override 
public JsonElement serialize(final ClientStats stats, final Type typeOfSrc, final JsonSerializationContext context) { 
     final JsonObject jsonObject = new JsonObject(); 
     jsonObject.addProperty("client_id", stats.getClientId()); 
     // ... just the same thing for others attributes. 
     return jsonObject; 
    } 
} 

Здесь вам не нужны какие-либо аннотаций и вы можете написать более чем один пользовательский сериализатор.

Пример основного класса использовать его:

package foo.bar; 

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 

public class Main { 

    public static void main(final String[] args) { 
    // Configure GSON 
    final GsonBuilder gsonBuilder = new GsonBuilder(); 
    gsonBuilder.registerTypeAdapter(ClientStats.class, new ClientStatsSerialiser()); 
    gsonBuilder.setPrettyPrinting(); 
    final Gson gson = gsonBuilder.create(); 

    final ClientStats stats = new ClienStats(); 
    stats.setClientId("ABCD-1234"); 

    // Format to JSON 
    final String json = gson.toJson(stats); 
    System.out.println(json); 
    } 
}