AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TDictionary speichern

Ein Thema von skoschke · begonnen am 25. Feb 2019 · letzter Beitrag vom 28. Feb 2019
Antwort Antwort
Seite 2 von 2     12   
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: TDictionary speichern

  Alt 25. Feb 2019, 15:44
Ja, das kam erst in Tokyo hinzu.
https://community.embarcadero.com/de...son-converters

Dann nimm doch meine zu Fuss-Variante?!
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#12

AW: TDictionary speichern

  Alt 25. Feb 2019, 18:49
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.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#13

AW: TDictionary speichern

  Alt 25. Feb 2019, 20:07
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;
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#14

AW: TDictionary speichern

  Alt 26. Feb 2019, 06:24
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.
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
577 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#15

AW: TDictionary speichern

  Alt 26. Feb 2019, 10:11
Danke Schokohase für das Beispiel, mal sehen ob das hier klappt...

Ciao
Stefan
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: TDictionary speichern

  Alt 28. Feb 2019, 07:29
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
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#17

AW: TDictionary speichern

  Alt 28. Feb 2019, 08:43
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr.
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