Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TDictionary speichern (https://www.delphipraxis.net/199845-tdictionary-speichern.html)

TiGü 25. Feb 2019 15:44

AW: TDictionary speichern
 
Ja, das kam erst in Tokyo hinzu.
https://community.embarcadero.com/de...son-converters

Dann nimm doch meine zu Fuss-Variante?!

Rollo62 25. Feb 2019 18:49

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.

Schokohase 25. Feb 2019 20:07

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;

Rollo62 26. Feb 2019 06:24

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.

sko1 26. Feb 2019 10:11

AW: TDictionary speichern
 
Danke Schokohase für das Beispiel, mal sehen ob das hier klappt...

Ciao
Stefan

skoschke 28. Feb 2019 07:29

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:
    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;
Lesen:
Delphi-Quellcode:
    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;
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 :-)

Ciao
Stefan

Rollo62 28. Feb 2019 08:43

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 03:03 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz