44
44
45
45
public final class MarkerGson {
46
46
47
- public static final Gson INSTANCE = new GsonBuilder ()
47
+ public static final Gson INSTANCE = addAdapters (new GsonBuilder ())
48
+ .setLenient ()
49
+ .create ();
50
+
51
+ /* This class can not be instantiated. */
52
+ private MarkerGson () {}
53
+
54
+ public static GsonBuilder addAdapters (GsonBuilder builder ) {
55
+ return builder
48
56
.registerTypeAdapter (Marker .class , new MarkerDeserializer ())
57
+ .registerTypeAdapter (Marker .class , new MarkerSerializer ())
49
58
.registerTypeAdapter (Line .class , new LineAdapter ())
50
59
.registerTypeAdapter (Shape .class , new ShapeAdapter ())
51
60
.registerTypeAdapter (Color .class , new ColorAdapter ())
52
61
.registerTypeAdapter (Vector2d .class , new Vector2dAdapter ())
53
62
.registerTypeAdapter (Vector3d .class , new Vector3dAdapter ())
54
63
.registerTypeAdapter (Vector2i .class , new Vector2iAdapter ())
55
- .registerTypeAdapter (Vector3i .class , new Vector3iAdapter ())
56
- .setLenient ()
57
- .disableHtmlEscaping ()
58
- .create ();
59
-
60
- /* This class can not be instantiated. */
61
- private MarkerGson () {}
64
+ .registerTypeAdapter (Vector3i .class , new Vector3iAdapter ());
65
+ }
62
66
63
67
static class MarkerDeserializer implements JsonDeserializer <Marker > {
64
68
@@ -71,11 +75,20 @@ static class MarkerDeserializer implements JsonDeserializer<Marker> {
71
75
);
72
76
73
77
@ Override
74
- public Marker deserialize (JsonElement jsonElement , Type type , JsonDeserializationContext jsonDeserializationContext ) throws JsonParseException {
78
+ public Marker deserialize (JsonElement jsonElement , Type type , JsonDeserializationContext context ) throws JsonParseException {
75
79
String markerType = jsonElement .getAsJsonObject ().get ("type" ).getAsString ();
76
80
Class <? extends Marker > markerClass = MARKER_TYPES .get (markerType );
77
81
if (markerClass == null ) throw new JsonParseException ("Unknown marker type: " + markerType );
78
- return jsonDeserializationContext .deserialize (jsonElement , markerClass );
82
+ return context .deserialize (jsonElement , markerClass );
83
+ }
84
+
85
+ }
86
+
87
+ static class MarkerSerializer implements JsonSerializer <Marker > {
88
+
89
+ @ Override
90
+ public JsonElement serialize (Marker src , Type typeOfSrc , JsonSerializationContext context ) {
91
+ return context .serialize (src , src .getClass ()); // serialize the actual marker-subclass
79
92
}
80
93
81
94
}
0 commit comments