Skip to content

Instantly share code, notes, and snippets.

@delphiapp
Created January 10, 2023 12:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save delphiapp/33c662cff234e5b846a3b3e87c51c4cf to your computer and use it in GitHub Desktop.
Save delphiapp/33c662cff234e5b846a3b3e87c51c4cf to your computer and use it in GitHub Desktop.
program pObjectClear;
{$APPTYPE CONSOLE}
{$DEFINE VER2}
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
uses
{$IFDEF FPC}
Interfaces,
{$ENDIF}
SysUtils, Dialogs, Forms
{$IFNDEF VER2}
,SynCommons, mORMot
{$ELSE}
,mormot.core.base, mormot.core.data, mormot.core.rtti, mormot.core.json, mormot.core.text
{$ENDIF}
;
type
TSubData = class(TSynPersistent)
private
fFileName:string;
published
property FileName:string read ffilename;
end;
TSubDataObjArray = array of TSubData;
TData = class(TSynAutoCreateFields)
private
fSubDatas:TSubDataObjArray;
public
procedure AddSubData;
published
property SubDatas:TSubDataObjArray read fSubDatas;
end;
var
Data:TData;
const
fnDataFile='Data.json';
{ TData }
procedure TData.AddSubData;
var sd:TSubData;
begin
sd :=TSubData.create;
sd.ffilename:='example';
ObjArrayAdd(fSubDatas,sd);
end;
begin
try
{$IFDEF VER2}
Rtti.RegisterObjArray(TypeInfo(TSubDataObjArray),TSubData);
{$ELSE}
TJSONSerializer.RegisterObjArrayForJSON(TypeInfo(TSubDataObjArray),TSubData);
{$ENDIF}
except
on E:ESynException do ShowMessage(E.Message);
end;
Data:=TData.Create;
try
try
//create file from two elements obj array
Data.AddSubData;
Data.AddSubData;
//Now here i have 2 elements of TSubData
ObjectToJSONFile(Data,fnDataFile);
//Next I want to add 2 elements from file to existing objects and must be 2 elements also because i use options - jpoClearValues
//but I get access violation
JsonFileToObject(fnDataFile,Data,nil,{$IFDEF VER2}JSONPARSER_TOLERANTOPTIONS+[jpoClearValues]{$ELSE}JSONTOOBJECT_TOLERANTOPTIONS{$ENDIF});//
//
finally
Data.Free;
end;
except
on E:Exception do ShowMessage(E.Message);
end;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment