我在Delphi中有一個類,我在jsonmarshalled文件中導出。Delphi在運行時更改JSONMarshalledAttribute
我跳過一些字段使用JSONMarshalledAttribute,駐留在單位:REST.JSON.Types。更多文獻here
[JSONMarshalledAttribute(False)]
Field1: double;
[JSONMarshalledAttribute(False)]
Field2: double;
到目前爲止,這項工作很好。
我的問題是:我可以在運行時將JSONMarshalledAttribute更改爲True嗎?
編輯1:
如這裏要求是代碼:
假設我們有一個窗體2:TForm的,並在窗體中如下...:
接口(我跳過屬性的形式....)
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;
然後我n個實現:
procedure TForm2.Button2Click(Sender: Tobject);
var
LArray: TJSONArray;
begin
MyClass := TmyClass.Create;
MyClass.name := 'myNAme';
LArray := myMarshaler(MyClass, 'FName', True);
end;
,並返回一個TJSONArray實際的功能:
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派生的自定義類。
,這是錯誤:
[dcc32 Error] Unit2.pas(134): E2250 There is no overloaded version of >'RegisterJSONMarshalled' that can be called with these arguments
我該如何解決這個問題?
這看起來像一個有趣的方法,我會給它一個鏡頭。謝謝 – Spymag
嗨,我嘗試了一下,使其工作。我的課程源自TObject,RegisterJSONMarshallet需要一個TClass,我該如何處理? – Spymag
據我所知,參數'TClass'指定你的類的名稱,你在那裏寫了'JSONMarshalledAttribute'到你的字段。只需使用classname作爲參數即可。 – ventiseis