Created
May 13, 2022 08:49
-
-
Save delphiapp/5e1e48bbd709f3155a7f46796d9b9a8a to your computer and use it in GitHub Desktop.
Seriallize Error mORMot2
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
{ | |
"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 | |
} | |
} | |
} | |
] | |
} |
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 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