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;

     

  • 相关阅读:
    Bootstrap3系列:按钮式下拉菜单
    Bootstrap3系列:按钮组
    Bootstrap3系列:下拉菜单
    CSS系列:CSS常用样式
    Entity Framework中使用IEnumerable<T>、IQueryable<T>及IList<T>的区别
    ASP.NET中Session的sessionState 4种mode模式
    ASP.NET MVC系列:Area
    Sql Server系列:SQL语句查询数据库中表、视图、存储过程等组成
    ASP.NET MVC系列:Model
    jQuery LigerUI系列:ligerComboBox
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940645.html
Copyright © 2011-2022 走看看