Delphi在运行时更改JSONMarshalledAttribute

Delphi在运行时更改JSONMarshalledAttribute,json,delphi,marshalling,Json,Delphi,Marshalling,我在Delphi中有一个类,我在jsonmarshalled文件中导出它 [JSONMarshalledAttribute(False)] Field1: double;

我在Delphi中有一个类,我在jsonmarshalled文件中导出它

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
我使用JSONMarshalledAttribute跳过了一些字段,该属性位于单元REST.JSON.Types中。更多文献

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
到目前为止,这个效果很好

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
我的问题是:我可以在运行时将JSONMarshalledAttribute更改为True吗

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
编辑1:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
根据要求,以下是代码:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
假设我们有一个Form2:TForm,并且在表单中,如下所示…:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
接口(我跳过表单的属性…)

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
然后在实施过程中:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
以及返回TJSONArray的实际函数:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
这将不起作用,因为Marshaler.RegisterJSONMarshalled需要TClass作为参数类型,但我想输入我自己的自定义类,这些自定义类派生自TObject

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
这就是错误:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
[dcc32 Error]Unit2.pas(134):E2250没有可以用这些参数调用的>'RegisterJSONMarshalled'的重载版本

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  

我该如何解决这个问题

否您不能在运行时更改属性。您必须找到一种不同的方法来处理封送处理的动态特性

您不能更改属性,但可以覆盖它

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
根据,它应与以下方面合作:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
Marshaler.RegisterJSONMarshalled(TYourClass, 'Field1', true);
因此,您不能使用类函数
TJson.ObjectToJsonObject(…)
,您必须自己创建封送拆收器(从单元
REST.JsonReflect
)。例如:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
要删除覆盖的值,可以调用

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
更新以澄清如何调用此方法:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
方法签名为:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
RegisterJSONMarshalled(clazz: TClass; Field: string; Marshal: Boolean);
因此,需要传入三个参数:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
Marshaler.RegisterJSONMarshalled(myclass.ClassType, Field, Marshal); 
或者更简单一些:

[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;                                                                                                                                                                  
Marshaler.RegisterJSONMarshalled(TMyClass, Field, Marshal); 

你必须通过你的班级类型。

这看起来是一个有趣的方法,我将试一试。谢谢,我正在努力使它工作。我的类是从TObject派生的,RegisterJSONMarshallet需要一个TClass,我该如何处理?据我所知,参数
TClass
指定了将
JSONMarshalledAttribute
写入字段的类的名称。仅使用类名作为参数。仍然无法实现这一点。有人能举个例子吗?我会非常感激的。太好了!谢谢你的大力帮助。现在已经开始运行了。
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field1: double;                                                                                                                                                         
[JSONMarshalledAttribute(False)]                                                                                                                                        
Field2: double;                                                                                                                                                         
type                                                                                                                                                                    
  TmyClass = class(Tobject)                                                                                                                                             
  private                                                                                                                                                               
    [JSONMarshalledAttribute(false)]                                                                                                                                    
    FName: string;                                                                                                                                                      
    FVal1: double;                                                                                                                                                      
  public                                                                                                                                                                
    property Name: string read FName write FName;                                                                                                                       
    property Val1: double read FVal1 write FVal1;                                                                                                                       
  end;                                                                                                                                                                  
  procedure TForm2.Button2Click(Sender: Tobject);                                                                                                                       
  var                                                                                                                                                                   
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    MyClass := TmyClass.Create;                                                                                                                                         
    MyClass.name := 'myNAme';                                                                                                                                           

    LArray := myMarshaler(MyClass, 'FName', True);                                                                                                                      
 end;                                                                                                                                                                   
  function TForm2.myMarshaler(myclass: TmyClass; Field: string; Marshal: Boolean)                                                                                       
    : TJSONArray;                                                                                                                                                       
  var                                                                                                                                                                   
    Marshaler: TJSONMarshal;                                                                                                                                            
    JSONObject: TJSONObject;                                                                                                                                            
    LArray: TJSONArray;                                                                                                                                                 
  begin                                                                                                                                                                 
    Marshaler := TJSONMarshal.Create(TJSONConverter.Create);                                                                                                            
    try                                                                                                                                                                 
       Marshaler.RegisterJSONMarshalled(myclass, Field,Marshal);                                                                                                        
      // Marshaler.DateFormat := jdfUnix;                                                                                                                               
      JSONObject := Marshaler.Marshal(myclass) as TJSONObject;                                                                                                          
      LArray := TJSONArray.Create;                                                                                                                                      
      LArray.AddElement(JSONObject);                                                                                                                                    
      result := LArray;                                                                                                                                                 
    finally                                                                                                                                                             
      FreeAndNil(Marshaler);                                                                                                                                            
    end;                                                                                                                                                                
  end;