zoukankan      html  css  js  c++  java
  • json传输对象

    The data types allowed to be transfered in DataSnap 2009 is limited to the dbExpress data types, but in DataSnap 2010 part of Delphi 2010 you are allowed to transfer any kind of object.

     

    Let’s define the object we would like to transfer, class TCustomer

    unit Customer;
     
    interface
     
    uses
       DBXJSON, DBXJSONReflect, SysUtils;
     
    type
       TMaritalStatus = (msMarried, msEngaged, msEligible);
     
    TCustomer = class
        private
           FName: string;
           FAge: integer;
           FMaritalStatus: TMaritalStatus;
        public
            property Name: string read FName write FName;
            property Age: integer read FAge write FAge;
            property MaritalStatus: TMaritalStatus read FMaritalStatus write FMaritalStatus;
     
            function toString : string;override;
      end;

     

    Only objects that descend from TJSONObject are able to be transferred between client and server without any transformation in DataSnap 2010. If your object does not descend from TJSONObject, then you have to use the TJSONMarshal and TJSONUnMarshal classes to convert those objects. The example below shows how to make this conversion.

    function CustomerToJSON(customer: TCustomer): TJSONValue;
      var
        m: TJSONMarshal;
      begin
        if Assigned(customer) then
        begin
          m := TJSONMarshal.Create(TJSONConverter.Create);
          try
            exit(m.Marshal(customer))
          finally
            m.Free;
          end;
        end
        else
          exit(TJSONNull.Create);
      end;

     

    function JSONToCustomer(json: TJSONValue): TCustomer;

      var

         unm: TJSONUnMarshal;

      begin

        if json is TJSONNull then

          exit(nil);

        unm := TJSONUnMarshal.Create;

        try

          exit(unm.Unmarshal(json) as TCustomer)

        finally

          unm.Free;

        end;

      end;

     

    // protected
    function TServerMethods.GetCustomer: TCustomer;
    begin
      Result := TCustomer.Create;
      Result.Name := 'Pedro';
      Result.Age := 30;
      Result.MaritalStatus := msEligible;
    end;
     
    // public
    function TServerMethods.GetJSONCustomer(): TJSONValue;
    var
      myCustomer: TCustomer;
    begin
      myCustomer := GetCustomer;
      Result := CustomerToJSON(myCustomer);
      myCustomer.Free;
    end;

     

    var
      proxy: TServerMethodsClient;
      myJSONCustomer: TCustomer;
    begin
     
      try
        proxy := TServerMethodsClient.Create(SQLConnection1.DBXConnection);
        myJSONCustomer := JSONToCustomer(proxy.myJSONCustomer);
     
        Button1.Caption := myJSONCustomer.ToString;
        myJSONCustomer.Free;
      finally
        SQLConnection1.CloneConnection;
        proxy.Free;
      end;
    end;

     

  • 相关阅读:
    Nginx分发服务
    apache+nginx 实现动静分离
    mysql 配置
    mysql 配置,还得多看看~
    Linux安装字体
    Oracle10g中阻塞锁查询更简单
    Access WMI via Python from Linux
    安装filezilla client报错libgnutls版本旧
    tomcat 服务形式检测
    JMX实现远程服务器Tomcat系统监控之三
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940645.html
Copyright © 2011-2022 走看看