Skip to content

Instantly share code, notes, and snippets.

@delphiapp
Created May 13, 2022 08:49
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/5e1e48bbd709f3155a7f46796d9b9a8a to your computer and use it in GitHub Desktop.
Save delphiapp/5e1e48bbd709f3155a7f46796d9b9a8a to your computer and use it in GitHub Desktop.
Seriallize Error mORMot2
{
"ModelUstr":
[
{
"ModelIEC": {
"VRecIEC": {
"TypeSynchTime": 3,
"VklIEC61850": false,
"EthCount": 0,
"MACAdress1": "",
"IPAdress1": "10.10.112.121",
"IPSubnet1": "255.255.255.0",
"EthTCP1": false
}
}
},
{
"ModelIEC": {
"VRecIEC": {
"TypeSynchTime": 3,
"VklIEC61850": true,
"EthCount": 0,
"MACAdress1": "",
"IPAdress1": "172.16.4.50",
"IPSubnet1": "255.255.255.0",
"EthTCP1": true
}
}
}
]
}
program SerializeErrormORMot2;
{$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}
;
const
__TRecIEC =
'TypeSynchTime:Integer ' +
'VklIEC61850:Boolean ' +
'EthCount:Integer ' +
'MACAdress1 : string ' +
'IPAdress1 : string ' +
'IPSubnet1 : string ' +
'EthTCP1 : Boolean'
;
type
TModelApp = class;
PRecModBusIEC = ^TRecIEC;
TRecIEC = packed record
TypeSynchTime:Integer;
VklIEC61850:Boolean;
EthCount:Integer;
MACAdress1 : string;
IPAdress1 : string;
IPSubnet1 : string;
EthTCP1 : Boolean;
end;
TModelIEC = class(TSynPersistent)
private
fRecIEC : TRecIEC;
function GetVariantRecIEC: Variant;
procedure SetVariantRecIEC(const Value: Variant);
published
property VRecIEC : Variant read GetVariantRecIEC write SetVariantRecIEC;
end;
TModelUstr = class(TSynAutoCreateFields)
private
fModelIEC:TModelIEC;
published
property ModelIEC:TModelIEC read fModelIEC;
end;
TModelUstrObjArray = array of TModelUstr;
TModelApp = class(TSynAutoCreateFields)
private
fModelUstr:TModelUstrObjArray;
public
function LoadConfiguration(AFileName:string):Boolean;
published
property ModelUstr:TModelUstrObjArray read fModelUstr;
end;
function TModelIEC.GetVariantRecIEC: Variant;
var s:RawUTF8;
begin
s:=RecordSaveJSON(fRecIEC,TypeInfo(TRecIEC));
// filefromstring(s,'test.json');
result:=_JSONFast(s);
end;
procedure TModelIEC.SetVariantRecIEC(const Value: Variant);
begin
RecordLoadJson(fRecIEC,_Safe(Value)^.ToJson,TypeInfo(TRecIEC));
end;
{ TModelApp }
function TModelApp.LoadConfiguration(AFileName: string): Boolean;
begin
JsonFileToObject(AFileName,Self,nil,[{$IFDEF VER2}jpoIgnoreUnknownProperty{$ELSE}j2oIgnoreUnknownProperty{$ENDIF}]);
end;
var ModelApp:TModelApp;
begin
try
{$IFDEF VER2}
Rtti.RegisterFromText(TypeInfo(TRecIEC),__TRecIEC);
Rtti.RegisterObjArray(TypeInfo(TModelUstrObjArray),TModelUstr);
{$ELSE}
TJSONSerializer.RegisterCustomJSONSerializerFromText(TypeInfo(TRecIEC),__TRecIEC);
TJSONSerializer.RegisterObjArrayForJSON(TypeInfo(TModelUstrObjArray),TModelUstr);
{$ENDIF}
except
on E:ESynException do ShowMessage(E.Message);
end;
ModelApp:=TModelApp.Create;
try
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