Skip to content

Instantly share code, notes, and snippets.

@delphiapp
Created August 26, 2022 08:14
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/6d017697dbcb6bae6587257c4402e0fe to your computer and use it in GitHub Desktop.
Save delphiapp/6d017697dbcb6bae6587257c4402e0fe to your computer and use it in GitHub Desktop.
{
"ModelListUstr": {
"ModelList":
[
{
"Name": "NameUstr",
"DateTime": "2022-08-26T11:13:11",
"TipList":
[
{
"Title": "TipUstr"
}
]
},
{
"Name": "NameUstr",
"DateTime": "2022-08-26T11:13:11",
"TipList":
[
{
"Title": "TipUstr"
}
]
}
]
}
}
program SerializeErrormORMot3;
{$APPTYPE CONSOLE}
{.$DEFINE VER2}
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
uses
{$IFDEF FPC}
Interfaces,
{$ENDIF}
SysUtils, Dialogs
{$IFNDEF VER2}
,SynCommons, mORMot
{$ELSE}
,mormot.core.base, mormot.core.data, mormot.core.rtti, mormot.rest.core, mormot.core.json, mormot.core.text
, mormot.core.os, mormot.core.variants, mormot.core.datetime
{$ENDIF}
;
type
TModelApp = class;
TTipUstr = class(TSynPersistent)
private
fTitle:RawUTF8;
published
property Title : RawUTF8 read fTitle;
end;
TTipUstrObjArray = array of TTipUstr;
TModelUstr = class(TSynAutoCreateFields)
private
fName:RawUTF8;
fDateTime:TDateTime;
fTipList:TTipUstrObjArray;
public
constructor Create();override;
procedure AddTipUstr(ATitle:RawUTF8);
published
property Name:RawUTF8 read fName;
property DateTime:TDateTime read fDateTime;
property TipList:TTipUstrObjArray read fTipList;
end;
TModelUstrObjArray = array of TModelUstr;
TModelListUstr = class(TSynPersistent)
private
fModelList: TModelUstrObjArray;
fModelListDA:TDynArray;
public
constructor Create();override;
function AddUstr:Integer;
published
property ModelList:TModelUstrObjArray read fModelList;
end;
TModelApp = class(TSynAutoCreateFields)
private
fModelListUstr:TModelListUstr;
public
function LoadConfiguration(AFileName:string):Boolean;
procedure SaveConfiguration(AFileName:string);
published
property ModelListUstr:TModelListUstr read fModelListUstr;
end;
{ TModelApp }
function TModelApp.LoadConfiguration(AFileName: string): Boolean;
begin
result:=False;
JsonFileToObject(AFileName,Self,nil,{$IFDEF VER2}JSONPARSER_TOLERANTOPTIONS{$ELSE}JSONTOOBJECT_TOLERANTOPTIONS{$ENDIF});
result:=True;
end;
var ModelApp:TModelApp;
procedure TModelApp.SaveConfiguration(AFileName: string);
begin
ObjectToJSONFile(Self,AFileName);
end;
{ TModelListUstr }
function TModelListUstr.AddUstr: Integer;
var mu:TModelUstr;
begin
mu:=TModelUstr.Create;
result:=ObjArrayAdd(fModelList,mu);
mu.AddTipUstr('TipUstr');
end;
constructor TModelListUstr.Create;
begin
inherited;
fModelListDA.Init(TypeInfo(TModelUstrObjArray),fModelList);
end;
{ TModelUstr }
procedure TModelUstr.AddTipUstr(ATitle: RawUTF8);
var
ltip: TTipUstr;
begin
ltip := TTipUstr.Create;
ltip.fTitle:=ATitle;
ObjArrayAdd(fTipList,ltip);
end;
constructor TModelUstr.Create;
begin
inherited;
fName:='NameUstr';
fDateTime:=Now;
end;
{ TTipUstr }
begin
try
{$IFDEF VER2}
Rtti.RegisterObjArray(TypeInfo(TModelUstrObjArray),TModelUstr);
Rtti.RegisterObjArray(TypeInfo(TTipUstrObjArray),TTipUstr);
{$ELSE}
TJSONSerializer.RegisterObjArrayForJSON(TypeInfo(TModelUstrObjArray),TModelUstr);
TJSONSerializer.RegisterObjArrayForJSON(TypeInfo(TTipUstrObjArray),TTipUstr);
{$ENDIF}
except
on E:ESynException do ShowMessage(E.Message);
end;
ModelApp:=TModelApp.Create;
try
// ModelApp.ModelListUstr.AddUstr;
// ModelApp.ModelListUstr.AddUstr;
// ModelApp.SaveConfiguration('SaveAll.json');
ModelApp.LoadConfiguration('SaveAll.json');
ModelApp.LoadConfiguration('SaveAll.json');
finally
ModelApp.Free;
end;
Readln;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment