Created
January 10, 2023 12:48
-
-
Save delphiapp/33c662cff234e5b846a3b3e87c51c4cf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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