gpt4 book ai didi

web-services - 在 Delphi 2007 中制作 TRemotable 对象副本的稳健方法

转载 作者:行者123 更新时间:2023-12-03 18:39:44 26 4
gpt4 key购买 nike

在 Delphi 2007 中是否有一种强大的机制来制作 TRemotable 对象(或后代)的副本?

我正在创建一个 Delphi Web 服务客户端,它从 Web 服务接收各种对象;当然,都是TRemotable的后代。在客户端中,我创建了一个匹配对象,然后将所有属性从提供的 TRemotable 的 Web 服务复制到我自己的对象中。这是通过 TypInfo.GetPropList() 然后围绕 TypInfo 循环完成的。 GetPropValue() 和 TypInfo.SetPropValue() 方法调用。虽然这对简单类型(字符串、整数、 bool 值等)非常有效,但它不适用于复杂类型,如日期、时间或子对象类型。而且我假设如果 Web 服务使用了新的复杂类型,我的复制代码也会中断。

看起来一种可能性是将对象序列化为 XML 文档,然后将其读入新对象。但这似乎只是复制一系列属性的大量开销。

最佳答案

找到了一个更强大的解决方案,似乎适用于简单的类型、TXS ...衍生类型和子对象类型:

procedure CopyNormal(Source, Target: TRemotable);
var
Converter: IObjConverter;
NodeObject: IXMLNode;
NodeParent: IXMLNode;
NodeRoot: IXMLNode;
XML: IXMLDocument;
XMLStr: WideString;
begin
XML:= NewXMLDocument;
NodeRoot:= XML.AddChild('Root');
NodeParent:= NodeRoot.AddChild('Parent');
Converter:= TSOAPDomConv.Create(NIL);
NodeObject:= Source.ObjectToSOAP(NodeRoot, NodeParent, Converter, 'CopyObject', '', [ocoDontPrefixNode], XMLStr);
Target.SOAPToObject(NodeRoot, NodeObject, Converter);
end;

关于web-services - 在 Delphi 2007 中制作 TRemotable 对象副本的稳健方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1167886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com