AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Marshalling und Unmarshalling mittels DBXJson

Ein Thema von kompi · begonnen am 25. Jul 2025 · letzter Beitrag vom 25. Jul 2025
Antwort Antwort
kompi

Registriert seit: 27. Apr 2012
Ort: Duisburg
59 Beiträge
 
Delphi 12 Athens
 
#1

Marshalling und Unmarshalling mittels DBXJson

  Alt 25. Jul 2025, 14:43
Ich suche Hilfe zu folgenden Problem

ich habe in Objekt
Delphi-Quellcode:
TLCListe = class(TKeyValueListe)

  end;
Dieses Objekt ist von dem folgenden Objekt abgeleitet.
Delphi-Quellcode:
  TKeyValueListe = class
     private
      ABWElements : TkeyValuElements;
      fname : string;
      fstringlist : Tstringlist;
         function checkstring(AValue: string): Boolean;
      function searchinliste(aname : string) : TKeyValue;
      function getvalue(aindex : string) : TKeyValue;
      procedure setvalue(aindex : string; avalue : TKeyValue);
      function getvalueatindex(aindex : integer) : TKeyValue;
      function getname : string;
      procedure setname(aname : string);
      function gettostring(adelimiter : string) : string;
      function gettodelimstring : string;
      function gettostringcomplete(adelimiter : string) : string;
      function gettodelimstringcomplete : string;
      procedure settostringcomplete(adelimiter : string; avalue : string);
      procedure settodelimstringcomplete(avalue : string);
      function gettostringlist : tstrings;
      procedure settostringlist(astring : Tstrings);
    public
      constructor Create; overload;
      constructor Create(Aname : string); overload;
      destructor Destroy; override;
      procedure assign(Akeyvalueliste : Tkeyvalueliste);
      procedure add(name : string; avalue : string); overload;
      procedure add(name : string; avalue : integer); overload;
      procedure add(name : string; avalue : extended); overload;
      procedure Reset;
      function Count : integer;
      property TostringList : Tstrings read gettostringlist write settostringlist;
      property Value[aindex : string] : TKeyValue read getvalue write setvalue;default;
      property Valueatindex[aindex : integer] : TKeyValue read getvalueatindex;
      Property Name : string read getname write setname;
{$WARNINGS off}
      Property Tostring[adelimiter : string] : string read gettostring;
{$Warnings on}
      Property Todelimstring : string read gettodelimstring;
      Property Tostringcomplete[adelimiter : string] : string read gettostringcomplete write settostringcomplete;
      Property Todelimstringcomplete : string read gettodelimstringcomplete write settodelimstringcomplete;
  end;

  TKeyValue = class
    private
      fname : string;
      fvalue : Tvalue;
      function getasstring : string;
      procedure setasstring(avalue : string);
      function getname : string;
      procedure setname(aname : string);
      function getasextended : Extended;
      procedure setasextended(avalue : Extended);
      function getasinteger : Integer;
      procedure setasinteger(avalue : Integer);
    public
      constructor Create; overload;
      constructor Create(Aname : string); overload;
      property Asstring : string read getasstring write setasstring;
      property AsExtended : Extended read getasextended write setasextended;
      property AsInteger : Integer read getasinteger write setasinteger;
      Property Name : string read getname write setname;
  end;
Das Objekt ist eine Property eines anderen Objektes

Ich versuche nun, das Objekt zu serialisieren und zu deserialisieren.

Dazu habe ich die folgender Funktionen geschrieben

Delphi-Quellcode:
function convertflocationcode(Data: TObject; Field: string) : string;
var
  ctx : Trtticontext;
  myvalue : TLCListe;
begin
  ctx := Trtticontext.create;
  try
    myvalue := ctx.gettype(Data.classtype ).GetField(Field).getvalue(Data).astype<TLCliste>;
    result := Myvalue.Tostringcomplete[';'];
  finally
    ctx.free;
  end;
end;

procedure Revertflocationcode(Data: TObject; Field: string; arg : string);
var
  ctx : Trtticontext;
  myvalue : Tlcliste;
begin
  ctx := Trtticontext.create;
  try
    if length(arg) > 0 then
    begin
      myvalue := ctx.gettype(Data.classtype ).GetField(Field).getvalue(Data).astype<TLCliste>;
      myvalue.Tostringcomplete[';'] := arg;
    end;
  finally
    ctx.free;
  end;
end;
Leider funktioniert das ganze nicht. Myvalue ist beim Reverter immer nil. Was mache ich da falsch? Ich benutze dbxjson.
Ich dachte, ich könnte hier eine Funktion der TKeyvalueliste verwenden, die die Keyvalues in einen String mit delimitern verwandelt.
Es handelt sich im übrigen hier um eine Liste mit Ortskennzeichen, welche in der Anlagentechnik verwendet werden.

Gruß Kompi
Detlef Schmitz
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.053 Beiträge
 
Delphi 12 Athens
 
#2

AW: Marshalling und Unmarshalling mittels DBXJson

  Alt 25. Jul 2025, 16:37
Ich rate dir dringend statt der alten DataSnap- / DBX-Geschichten, die wirklich alt sind, aktuelle Lösungen zu verwenden. Es gibt z.B. die Unit REST.Json:
https://docwiki.embarcadero.com/Libr...ctToJsonString
Delphi-Quellcode:
uses
  REST.Json;

type
  TPerson = class
  public
    Name: string;
    Age: Integer;
    constructor Create;
  end;

procedure Test;
var
  Person, NewPerson: TPerson;
  JSONString: string;
begin
  Person := TPerson.Create;
  Person.Name := 'Vorname';
  Person.Age := 45;

  // serialisieren
  JSONString := TJson.ObjectToJsonString(Person);

  // deserialisieren
  NewPerson := TJson.JsonToObject<TPerson>(JSONString);

  ShowMessage(NewPerson.Name);
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:30 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