# GSON - Liste mit Interfaces



## AntiMuffin (14. Apr 2015)

Hallo,
es geht zwar nicht um XML, aber um Json und dachte das passt am besten in dieses Forum. Ich schreibe gerade an einer Anwendung welche Daten mithilfe Json vom Client zum Server schicken soll. Dabei sollen Objekte wie Linien, Quadrate, etc. gesendet werden welche alle das Interface Renderable implementieren und somit die Methode render (). Ich möchte also irgendwelche Renderable Objekte senden. Dazu habe ich die Klasse RenderData welche eine List von Renderable enthält und noch andere Informationen. Nun parse ich diese ein solches RenderData Objekt mithilfe von der Gson Bibliothek zu einem Json String und übertrage die Daten zum Server welcher nun mit hilfe von Gson versucht es wieder in Objekte umzuwandeln.

Hier entsteht nun das Problem! 
Da Gson nur weiß das es sich um Renderable Objekte handelt (Und nicht um genau welches, wie zB das es eine Linie darstellen soll). Aus diesem Grund kann Gson auch keine Insanzen erstellen. Gibt es hierfür einen Standard Weg um das Problem zu behandeln? - Ich habe schon im Internet nachgesehen und diesen "TypeAdapter" gefunden, ist die der Richtige Ansatz? 

Gruß,
AntiMuffin


----------



## stg (14. Apr 2015)

Ich befürchte fast, dass deine Wahl von GSON hier nicht zielführend ist.

Bei der "Serialisierung" deiner Renderable-Objekte gehen die Informationen über die konkrete Implementierung verloren. Genau die brauchst du aber ja, um entscheiden zu können, welchen Typ dein Deserialisiertes Objekt am Ende wieder haben soll. Das gleiche Problem bekommst du übrigens auch bei abstrakten Klassen ...


----------



## AntiMuffin (14. Apr 2015)

Nein das Problem hab ich nicht, GSON liest es anscheinend mithilfe von Reflektion aus und nicht mit Serialisierung. Ich glaube auch eine brauchbare Lösung auf Stackoverflow  gefunden zu haben.


----------



## stg (14. Apr 2015)

Sieht interessant aus, danke für den Link


----------



## dzim (16. Apr 2015)

Eigentlich auch doof, dass man dadurch eine extra Property im JSON erhält (im Beispiel halt mit dem Namen "type"). Aber ich kenn das auch schon von anderen ORM: SimpleXML. Brauchte ich mal auf Android mit einem ähnlichen Szenario. Da musste ich zwar nicht gross was für machen, aber es hat mir dann immer noch eine zusätzliches Attribut mit dem Namen "class" generiert, damit er dann bei deserialisieren wieder wusste, was für eine Implementierung da zu nehmen ist...


----------

