![]() |
AW: TDictionary speichern
Ja, das kam erst in Tokyo hinzu.
![]() Dann nimm doch meine zu Fuss-Variante?! |
AW: TDictionary speichern
Hallo Schokohase,
Meinst du das man ein Dictionary schon mit JSON Hausmitteln, ala JsonMarshaler, in ein JsonObject serialisieren kann ? Wäre ja interessant, habe ich noch nicht ausprobiert. |
AW: TDictionary speichern
Ja, nee, so nicht ...
Aber die Konvertierung ist relativ simpel:
Delphi-Quellcode:
uses
System.Generics.Collections, System.JSON; function DictionaryToJsonObject(const ADict: TDictionary<string, string>): TJSONObject; var lPair: TPair<string, string>; begin Result := TJSONObject.Create(); for lPair in ADict do begin Result.AddPair(lPair.Key, lPair.Value); end; end; function JsonToDictionary(const AJson:TJsonObject) : TDictionary<string,string>; var lPair: TJSONPair; begin Result := TDictionary<string,string>.Create(); for lPair in AJson do begin Result.Add(lPair.JsonString.Value,lPair.JsonValue.Value); end; end; |
AW: TDictionary speichern
Ok, dankesehr für die Klärung.
So in der Art meinte ich das auch, das nenne ich "Array" weil da mehrere Wertepaare hintereinander drin sind. |
AW: TDictionary speichern
Danke Schokohase für das Beispiel, mal sehen ob das hier klappt...
Ciao Stefan |
AW: TDictionary speichern
So, nach vielerlei Versuchen, das vernünftig hinzubekommen, bin ich auf die von mir bisher noch nie verwendeten
TBinaryWriter und TBinaryReader gestoßen. damit war die Umsetzung absolut problemlos: Schreiben:
Delphi-Quellcode:
Lesen:
ms.Clear;
BW := TBinaryWriter.Create(ms, TEncoding.Unicode, false); BW.Write(Dict.Count); for Pair in Dict do begin BW.Write(Pair.Key); BW.Write(Pair.Value); end; BW.Free;
Delphi-Quellcode:
Damit sind auch die Probleme mit jeglichen Steuer/Sonderzeichen in den Values gelöst, die in der ersten manuellen Variante hätten auftreten können :-)
Dict.Clear;
ms.Position := 0; BR := TBinaryReader.Create(ms, TEncoding.Unicode, false); anz := BR.ReadInteger; for i := 1 to anz do begin Key := BR.ReadString; Value := BR.ReadString; Dict.Add(Key, Value); end; BR.Free; Ciao Stefan |
AW: TDictionary speichern
Ja die verschollenen Goodies, gut das man die ab und zu mal wieder auskramt.
Das bringt mich auch sofort auf Optimisierungs-Ideen in meinem Code. Dankesehr fürs Buddeln :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz