如何獲取僅包含名稱和標志的 JSON?
TUser = class
private
FName: string;
FFlags: UInt32;
FFields: UInt32;
FCreated: TDateTime;
public
property Name: string read FName write FName;
property Flags: UInt32 read FFlags write FFlags;
property Fields: UInt32 read FFields write FFields;
property Created: TDateTime read FCreated write FCreated;
constructor Create;
end;
通常用于該類的所有欄位:
var
User: TUser
sJson: string;
sJson := User.AsJson;
但有時我只需要一個帶有名稱和標志欄位的 JSON。目前,為了獲得這樣的 JSON,我使用這樣的代碼:
var
User: TUser
usr: ISuperObject;
sJson: string;
usr := SO(User.AsJson);
usr.Remove('Fields');
usr.Remove('Created');
sJson := usr.AsJSON;
但我認為不是最佳代碼(實際上在實際代碼中我有 15 個欄位,需要洗掉 12 個)。如何更快地做到這一點?
更新(另一種方法):
可能這對我的目的會更快更有用嗎?
usr := SO('');
usr.S['Name'] := User.Name;
usr.I['Flags'] := User.Flags;
sJson := usr.AsJSON;
uj5u.com熱心網友回復:
感謝@NasreddineGalfout,我發現 Neon JSON 庫可以做到這一點。使用 INeonConfiguration,我可以選擇應序列化的公共或已發布或受保護(或任何組合)屬性欄位。這是我需要的嗎?此外,使用 Neon 進行反序列化比使用 XSuperObject 快 2 倍。
type
TUser = class
private
FName: string;
FFlags: UInt32;
FFields: UInt32;
FCreated: TDateTime;
public
property Name: string read FName write FName;
property Flags: UInt32 read FFlags write FFlags;
published
property Fields: UInt32 read FFields write FFields;
property Created: TDateTime read FCreated write FCreated;
constructor Create;
end;
function MyToJson(User: TUser): string;
var
Config: INeonConfiguration;
LJSON: TJSONValue;
LWriter: TNeonSerializerJSON;
begin
Config := TNeonConfiguration.Default.SetVisibility([mvPublic{, mvPublished}]);
LWriter := TNeonSerializerJSON.Create(Config);
try
LJSON := LWriter.ObjectToJSON(User);
try
Result := TJSONUtils.ToJSON(LJSON);
finally
LJSON.Free;
end;
finally
LWriter.Free;
end;
end;
procedure MyFromJson(var User: TUser; const AJson: string);
var
Config: INeonConfiguration;
LJSON: TJSONValue;
LReader: TNeonDeserializerJSON;
begin
LJSON := TJSONObject.ParseJSONValue(AJson);
if not Assigned(LJSON) then
Exit;
Config := TNeonConfiguration.Default.SetVisibility([mvPublic{, mvPublished}]);
try
LReader := TNeonDeserializerJSON.Create(Config);
try
LReader.JSONToObject(User, LJSON);
finally
LReader.Free;
end;
finally
LJSON.Free;
end;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424515.html
