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;

     

  • 相关阅读:
    前端面试:Vue.js常见的问题
    Web前端攻击方式及防御措施
    JavaScript代码规范
    bind、apply、call的理解
    Markdown标记语言简介及使用方法
    github个人主页的建立
    深度理解“高内聚低耦合”
    私有云与公有云的区别
    响应式网页设计
    redis和mongodb比较
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940645.html
Copyright © 2011-2022 走看看