Gibt es einen robusten Mechanismus zum Erstellen einer Kopie des TRemotable-Objekts (oder Nachkommen) in Delphi 2007?Robuste Methode zum Erstellen einer Kopie eines TRemotable-Objekts in Delphi 2007
Ich erstelle einen Delphi Web-Service-Client, der eine Vielzahl von Objekten von einem Web-Service empfängt; Natürlich sind alle Nachkommen von TRemotable. Im Client erstelle ich ein passendes Objekt und kopiere dann alle Eigenschaften aus dem Webservice, der TRemotable zur Verfügung stellt, auf mein eigenes Objekt. Dies geschieht über TypInfo.GetPropList() und dann eine Schleife um TypInfo. Methodenaufrufe GetPropValue() und TypInfo.SetPropValue(). Obwohl dies für die einfachen Typen - Strings, Ints, Bool usw. - hervorragend geeignet ist, funktioniert es nicht für komplexe Typen wie Daten, Zeiten oder Unterobjekttypen. Und ich nehme an, dass, wenn der Web-Service jemals einen neuen komplexen Typ verwendet, mein Kopiercode auch brechen würde.
Es scheint eine Möglichkeit zu sein, das Objekt in ein XML-Dokument zu serialisieren und es dann in das neue Objekt einzulesen. Aber das scheint eine Menge Aufwand zu sein, um eine Reihe von Eigenschaften zu kopieren.
für spätere Versionen (mindestens XE7) ändern, um NodeObject zu sagen: = Source.ObjectToSOAP (NodeRoot, NodeParent, Konverter, 'CopyObject', '', '', [ocoDontPrefixNode], XMLStr); – skamradt