Я хотел бы сделать пользовательскую вложенную сериализацию. Это образец. У меня похожая ситуация в моем приложении.
Я не думаю, что у меня есть хорошее понимание вещей здесь.
Кажется, что SerializationContext передается в метод сериализации. Я думаю, это можно использовать для вложенных сериализаций. Я не могу найти простой пример онлайн ...
Но то, что я здесь сделал, не работает. Если вы видите вывод, он выводит все поля объектов Property, тогда как я хочу получить только несколько, а также с разными именами и т. Д.
public class Outer {
private String name;
private String objectId;
private List<Property> properties;
// getters setters
}
public class Property {
private Integer id;
private String info;
private Date createdOn;
private String dontCare;
Property (Integer id) {
this.createdOn = new Date();
this.dontCare = ( (id%2 == 0) ? "Y" : "N");
this.id = id;
SimpleDateFormat dt = new SimpleDateFormat("mm-dd hh:mm:ss");
this.info = dt.format(createdOn);
}
// getters setters
}
public class Practice {
public static void main (String args[])
{
JsonSerializer<List<Property>> listSerializer = new JsonSerializer<List<Property>>() {
@Override
public JsonElement serialize(List<Property> src, Type typeOfSource, JsonSerializationContext context) {
JsonSerializer<Property> serializer = new JsonSerializer<Property>() {
@Override
public JsonElement serialize(Property src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject property = new JsonObject();
property.addProperty("Identifier", src.getId());
return property;
}
}; // will implement in a second
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Property.class, serializer);
Gson customGson = gsonBuilder.setPrettyPrinting().create();
JsonObject jsonObject = new JsonObject();
List<Property> properties = new ArrayList<Property>(src.size());
String propertiesAsString = "";
for (Property aProperty : src) {
propertiesAsString +=customGson.toJson(aProperty);
}
JsonObject propertiesJsonObject = new JsonObject();
propertiesJsonObject.addProperty("properties", propertiesAsString);
return propertiesJsonObject;
}
};
GsonBuilder gsonBuilder4List = new GsonBuilder();
Type propertyListType = new TypeToken<List<Property>> () {}.getType();
gsonBuilder4List.registerTypeAdapter(propertyListType, listSerializer);
Gson customGson4List = gsonBuilder4List.setPrettyPrinting().create();
String customJSON2 = customGson4List.toJson(giveMePropertyList(3));
System.out.println("Property List...");
System.out.println (customJSON2);
}
public static ArrayList<Property> giveMePropertyList (int count)
{
ArrayList<Property> list = new ArrayList<Property>();
for (int i = 0; i < count; i++) {
int random = (int )(Math.random() * 98768 + 1);
list.add(new Property(random));
}
return list;
}
}
вывод
Property List...
[
{
"id": 43875,
"info": "51-06 08:51:38",
"createdOn": "Nov 6, 2018 8:51:38 AM",
"dontCare": "N"
},
{
"id": 30511,
"info": "51-06 08:51:38",
"createdOn": "Nov 6, 2018 8:51:38 AM",
"dontCare": "N"
},
{
"id": 17348,
"info": "51-06 08:51:38",
"createdOn": "Nov 6, 2018 8:51:38 AM",
"dontCare": "Y"
}
]