Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
Delphi 12 Athens
|
AW: JSON-Serialisierung von generischen Listen nur mit MemoryLeaks (FastMM4)
20. Nov 2014, 01:29
Zwei Dinge konnte ich feststellen:
1. Der abstrakte Fehler kommt, weil der arrayManager
mit im JSON-String steht. Dadurch wird beim Konvertieren in das Objekt eine TArrayManager
instantiiert, obwohl dies nur die abstrakte Klasse ist.
2. Das inherited
in TObjectsEntries.create
und TObjectsTEntry.create
ruft TList<T>.Create
auf und nicht TObjectList<T>.Create
. Dadurch wird OwnsObjects
nicht gesetzt und man muss die Items
im Destroy
selbst wegräumen. Ersetzt man das inherited
durch inherited Create
funktioniert es.
Den abstrakten Fehler bekommt man nicht ganz so einfach weg. Eigentlich müsste das in System.Generics.Collections
durch ein entsprechendes Attribut geregelt werden. Alternativ kann man das TJson.ObjectToJsonString
wegschmeißen und den Spaß von Hand nachbilden. Würde TJson.ObjectToJsonObject
in der ersten Zeile statt TJSONMarshal.Create(TJSONConverter.Create)
besser TJSONConverters.GetJSONMarshaler
aufrufen, könnte man ja noch was mit den MarshalFlags machen - ist leider nicht.
|