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;

     

  • 相关阅读:
    SQL中使用WITH AS提高性能
    电子邮件原理
    DirectoryEntry 活动目录的使用
    Entity Framework 教程(转)
    用sp_addlinkedserver建立链接服务器(sql server2008中通过测试)
    SQL2008和SQL2000可以跨服务器连接查询的测试实例
    Linq快速入门——扩展方法
    easyui 很好很强大
    【转】Jmeter内存溢出处理方式记录
    【转】Jmeter安装成功后的目录介绍
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940645.html
Copyright © 2011-2022 走看看