Um die zweite Frage zu beantworten:
class(TDictionary<string,TdJSON>) entspricht TStrings/TStringList, bei der jeder Eintrag ja auch vor Delphi 2009 jeweils ein Objekt enthalten konnte.
Unterschied zu Generics: alle Methoden zum Hinzufügen / Lesen der Einträge eines TDictionary sind typsicher. Wollte man das in Delphi ohne Generics nachprogrammieren, würde man eine Klasse TStringListdJSON schreiben mit Methoden, die nur den Typ TdjSON als Objekt erlauben.
Delphi-Quellcode:
type
TStringListdJSON = class(TObject)
private
FList: TStrings; // enthält eine nur "intern" verwendete TStringList-Instanz
...
end;