Wie Dariusz bereits erwähnt hat, ist es gut, die Tatsache auszunutzen, dass Array
class den Konstruktor akzeptiert, der das normale Array akzeptiert.
Wenn Sie den Standard-Serializer verwenden, sieht Ihr Array nach JSON serialisiert wie folgt aus:
%Vor% Es ist eindeutig eine Verschwendung von Speicherplatz, es sei denn, Sie möchten, dass die Felder size
und ordered
beibehalten werden.
Ich schlage vor, dass Sie die Art ändern, wie Sie Ihr Objekt serialisieren, so dass es mehr wie ein normales Array aussieht. Am anderen Ende kann die Deserialisierung Array
-Objekt wieder aufbauen.
Wenn Sie das folgende Paar Serializer und Deserializer hinzufügen:
%Vor%Sie haben eine transparente Konvertierung zwischen diesen Typen
Die Array-Klasse von libgdx hat einen Konstruktor, der ein Array akzeptiert: public Array (T[] array)
.
Anstatt zu versuchen, das libgdx-Array zu serialisieren, verwenden Sie eine einfache Klasse mit einem Array als Basis für die Serialisierung / Desrialisierung und erstellen dann ein libgdx-Array basierend auf den deserialisierten Daten.
Im Allgemeinen ist es eine gute Regel, nur POJO-artige Objekte zu serialisieren.
Kurz gesagt:
%Vor%Eine Möglichkeit ist es, einen Serializer wie
zu schreiben %Vor%Und ein Deserializer wie
%Vor% Dann beschriften Sie die Eigenschaft, die ein solches Array mit @JsonSerialize(using = MyArraySerializer.class) @JsonDeserialize(using = MyArrayDeserializer.class)
enthält.
Wenn Sie Ihre Arrayimplementierung direkt anstelle einer Containerklasse verwenden, enthält diese Seite ein Beispiel zum Registrieren von Serialisierungshandlern zur Laufzeit Ссылка
Ich sollte beachten, dass ich in dieser Antwort die Jackson 1.9 API benutze und die 2.x könnte etwas anders sein. Laut Ссылка sind die auffälligsten Unterschiede die Änderungen in den Paketnamen und wo sich einige Klassen befinden. Ansonsten sollte dieser Code nicht betroffen sein.
Tags und Links java json jackson json-deserialization