您的位置:首页 > Web前端 > JavaScript

DataSnap与JSON序列化(2)

2010-10-12 17:35 316 查看
Server Method可以支持OLEVariant类型,但不支持Variant类型,呵呵,都一样的东西,可能笔误吧。查看DSReflect.pas的这个函数

function TDSClass.GetDBXDataType(AllowUnknown: Boolean; Parameter: TDBXParameter): Integer;

begin

.....

    else if FTypeData.ClassType.ClassNameIs(SOleVariant) then
    begin
      Result := TDBXDataTypes.VariantType;
    end
......


里面只列举了OLEVariant。

写一个函数试试:

function TERP_Order.TestVariantArray: OLEVariant;
begin
  Result:=VarArrayOf(['wxh',34,True,Now]);
end;


客户端调用:

procedure TForm1.Button5Click(Sender: TObject);
var
  vC:TDBXCommand;
  P:TDBXParameter;
  V:OLEVariant;
begin
  SQLConnection1.Params.Values['CommunicationProtocol'] := 'http';
  SQLConnection1.Params.Values['HostName'] := edDSServer.Text;
  SQLConnection1.Params.Values['Port'] := edDSPort.Text;
  SQLConnection1.Params.Values['DSAuthenticationUser'] := edUserName.Text;
  SQLConnection1.Params.Values['DSAuthenticationPassword'] := edPassowrd.Text;
  SQLConnection1.Open;

  vC:=SQLConnection1.DBXConnection.CreateCommand;
  vC.CommandType:= TDBXCommandTypes.DSServerMethod;
  vC.Text:='TERP_Order.TestVariantArray'
  vC.Prepare;
  vC.ExecuteUpdate;
  V:=vC.Parameters[0].Value.asVariant;
  Edit1.Text:=VarToStr(V[0]);
  vC.Free;
end;


可以得到正确的结果。但是如果用http get调用,就会报错:

服务器错误信息:Cannot convert DBX type TDBXTypes.Variant into a JSON value

客户端错误信息:HTTP/1.1 500 Internal Server Error.

难道DataSnap自己没有使用JSON格式编码??
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: