我有一个datasnap服务器,我必须继续运行或至少无法更新。 我想用新客户端连接到它。
所有代码都是相同的,但我重构了一些代码,所以现在我用来连接服务器的类在另一个单元中。
servermethods是一个返回TMyObject
的函数。但实际上,服务器返回类型为Oldunit.TMyObject
的编组对象。但客户不承认这一点。
function TJSONUnMarshal.CreateObject(JsonObj: TJSONObject): TObject;
var
objType: string;
ObjId: string;
objFields: TJSONObject;
Obj: TObject;
rttiType : TRttiType;
attr : TCustomAttribute;
customizer : TJSONPopulationCustomizer;
JsonPairID: TJSONPair;
JsonPairType: TJSONPair;
JsonPairFields: TJSONPair;
JsonPairRefName: TJSONPair;
begin
assert(JsonObj <> nil);
assert(JsonObj.Count > 1);
JsonPairID := JsonObj.Get(ID_NAME);
if JsonPairID <> nil then
begin
JsonPairType := JsonObj.Get(TYPE_NAME);
JsonPairFields := JsonObj.Get(FIELDS_NAME);
Assert(JsonPairFields <> nil);
Assert(JsonPairType <> nil);
objType := JsonPairType.JsonValue.Value;
ObjId := JsonPairID.JsonValue.Value;
objFields := TJSONObject(JsonPairFields.JsonValue);
Obj := ObjectInstance(FRTTICtx, objType); // returns nil, objtype is wrong
if Obj = nil then
raise EConversionError.Create(Format(SCannotCreateType, [objType]));
答案 0 :(得分:0)
在My Servermethodsclient中,我更改了我的参数类型。它的工作原理,但它看起来更像是一个快速修复我,我希望我可以自动化它。如果我有很多像这样的服务器方法,这将是一项繁琐的工作,但是现在只有一种方法可以在服务器上进行身份验证。
pJSON := TJSONObject( FPW_GetServerInfoCommand.Parameters[2].Value.GetJSONValue(True));
pPair := pJSON.RemovePair('type');
pPair.Free;
pJSON.AddPair(TJSONPair.Create('type', 'NewUnit.TMyObject'));
Result := TMyObject(FUnMarshal.UnMarshal(FPW_GetServerInfoCommand.Parameters[2].Value.GetJSONValue(True)));