Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Objekt kopieren... gibt es was Neues ? (https://www.delphipraxis.net/166592-objekt-kopieren-gibt-es-neues.html)

haentschman 21. Feb 2012 09:45

AW: Objekt kopieren... gibt es was Neues ?
 
Sooo...
Hab die Demo mal am laufen. Wenn ich das richtig verstehe zerpfückt Marshall das Object in JSON "Text" incl. Daten. Das Unmarshall setzt aus diesem "Text" ein Object zusammen und gibt es zurück.

Leider bekomme ich beim Unmarshall mit TPerson1 eine Zugriffsverletztung. Die Listen gehen.

Die Richtung stimmt schon mal oder ?

jaenicke 21. Feb 2012 10:04

AW: Objekt kopieren... gibt es was Neues ?
 
Ja, das stimmt so. Bei XE gibt es aber noch einen Fehler, der dazu führt, dass Dezimalzahlen nicht korrekt übertragen werden. Leider wird nämlich der lokale Dezimalseparator benutzt und der stimmt nun einmal in Deutschland mit dem Feldtrennzeichen von JSON überein. Ich glaube daher rührt der Fehler.

Deshalb musst du bei XE vor dem Marshalling/Unmarshalling den Dezimalseparator auf einen Punkt setzen und danach wieder zurück. Bei XE2 ist das behoben.

himitsu 21. Feb 2012 10:09

AW: Objekt kopieren... gibt es was Neues ?
 
Wenn man aber lokal kopiert, dann sollte das doch egal sein? (wenn beim Unmarshallen der selbe "lokale" Separator verwendet wird, wie beim Marshallen)

Schau dir mal den JSON-String an, also ob dort auch alles drin ist, was rein müßte.

haentschman 21. Feb 2012 10:18

AW: Objekt kopieren... gibt es was Neues ?
 
8-) Du traust mir echt zu, daß ich das verstehe ?
Zitat:

{"type":"Person1.TPerson1","id":1,"fields":{"FFirs tName":"aSampleFirst","FLastName":"aSampleLast","F WeightLb":160,"FHeightIn":70,5,"FDateOfBirth":2226 1,"FAddresses":[["addHome","aSampleHomeStreet","aSampleHomeCity","a SampleHomeState","aSampleHomeZip"],["addWork","aSampleWorkStreet","aSampleWorkCity","a SampleWorkState","aSampleWorkZip"]],"FPhones":[["aSampleMobileNumber","phMobile"],["aSampleWorkNumber","phWork"],["aSampleHomeNumber","phHome"]]}}
Zitat:

den Dezimalseparator auf einen Punkt setzen
... vom System ?

himitsu 21. Feb 2012 10:29

AW: Objekt kopieren... gibt es was Neues ?
 
Code:
{
  "type": "Person1.TPerson1",
  "id": 1,
  "fields": {
    "FFirstName": "aSampleFirst",
    "FLastName": "aSampleLast",
    "FWeightLb": 160,
    "FHeightIn": 70,
    5,
    "FDateOfBirth": 22261,
    "FAddresses": [
      [
        "addHome",
        "aSampleHomeStreet",
        "aSampleHomeCity",
        "aSampleHomeState",
        "aSampleHomeZip"
      ],
      [
        "addWork",
        "aSampleWorkStreet",
        "aSampleWorkCity",
        "aSampleWorkState",
        "aSampleWorkZip"
      ]
    ],
    "FPhones": [
      [
        "aSampleMobileNumber",
        "phMobile"
      ],
      [
        "aSampleWorkNumber",
        "phWork"
      ],
      [
        "aSampleHomeNumber",
        "phHome"
      ]
    ]
  }
}
[...] = ein Array, bzw. eine Liste
{...} = ein Objekt
x:y = ein Parameter (Name:Wert)

Nur mit dieser namenlosen
Delphi-Quellcode:
5,
kann ich nicht viel anfangen.

Ich weiß jetzt nicht wie das Objekt aussieht (hab hier in keine Anhänge reingesehn), aber Listen scheinen schon drin zu sein. (k.A. ob auch alles richtig ist)

Dezimalzahlen sind hier nicht enthalten, also sollte es damit keine Probleme geben, oder soll das Eine eine 70,5 sein?

haentschman 21. Feb 2012 10:42

AW: Objekt kopieren... gibt es was Neues ?
 
Zitat:

oder soll das Eine eine 70,5 sein?
...ja, die "Höhe" der Person :lol:

in der MainUnit(Form.Create) waren Kommentare bezüglich der Testung alternativer Dezimalseperatoren. Dort habe ich den Dezimalseperator auf "." umgestellt und im OnDestroy wieder zurück. Damit geht auch TPerson1.

Jetzt muß ich mal schauen was ich alles wo benötige. (TTypeFactory etc.) Am besten ich mache mir mal ein Testprogramm und gehe Euch dann auf die Nerven... 8-)

Nachtrag:
Zitat:

Dort habe ich den Dezimalseperator auf "." umgestellt
...mit Ctrl-Klick komme ich zur Deklaration in SysUtils. Heißt das, daß für die Zeit der Dezimalseperator Systemweit umgestellt ist ?
PS: ist der auf einem deutschen System nicht normal sowieso der "." :gruebel:

Bummi 21. Feb 2012 10:43

AW: Objekt kopieren... gibt es was Neues ?
 
unter XE bekomme ich

"Exception der Klasse EInsufficientRtti mit der Meldung 'Unzureichende RTTI zur Unterstützung dieser Operation verfügbar'"

bei :
Delphi-Quellcode:
  With Button2.Clone do
    begin
      left := left + 100;
      top := top + 100;
    end;

haentschman 21. Feb 2012 10:48

AW: Objekt kopieren... gibt es was Neues ?
 
...bei der gleichen Demo ? Hast du die aktuelle Version aus dem Repository ?

himitsu 21. Feb 2012 10:50

AW: Objekt kopieren... gibt es was Neues ?
 
Nicht systemweit (Windows), sondern nur programmweit (in deinem Programm).

PS: Beim Button (allem ab TComponent, wenn ordentlich programmiert), kannst du auch TStream verwenden.
Delphi-Referenz durchsuchenTStream.ReadComponent und Co.

haentschman 21. Feb 2012 10:51

AW: Objekt kopieren... gibt es was Neues ?
 
...ja dann ist es gut. 8-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 Uhr.
Seite 2 von 3     12 3      

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