Browse Source

[serializer] separate interface

Exilon 5 years ago
parent
commit
8a634538ab
2 changed files with 28 additions and 8 deletions
  1. 4 8
      Quick.Json.Serializer.pas
  2. 24 0
      Quick.Serializer.Intf.pas

+ 4 - 8
Quick.Json.Serializer.pas

@@ -41,6 +41,7 @@ uses
   SysUtils,
   Rtti,
   TypInfo,
+  Quick.Serializer.Intf,
   {$IFDEF FPC}
    rttiutils,
    fpjson,
@@ -68,6 +69,8 @@ uses
 
 type
 
+  IJsonSerializer = ISerializer;
+
   EJsonSerializeError = class(Exception);
   EJsonDeserializeError = class(Exception);
 
@@ -115,14 +118,6 @@ type
     {$ENDIF}
   {$ENDIF}
 
-  IJsonSerializer = interface
-  ['{CA26F7AE-F1FE-41BE-9C23-723A687F60D1}']
-    function JsonToObject(aType: TClass; const aJson: string): TObject; overload;
-    function JsonToObject(aObject: TObject; const aJson: string): TObject; overload;
-    function ObjectToJson(aObject : TObject; aIndent : Boolean = False): string;
-    function ValueToJson(const aValue : TValue; aIndent : Boolean = False) : string;
-  end;
-
   TSerializeLevel = (slPublicProperty, slPublishedProperty);
 
   TRTTIJson = class
@@ -709,6 +704,7 @@ begin
       case aProperty.PropertyType.TypeKind of
         tkDynArray :
           begin
+            if member is TJSONNull then Exit;
             {$IFNDEF FPC}
             jArray := TJSONObject.ParseJSONValue(member.ToJSON) as TJSONArray;
             {$ELSE}

+ 24 - 0
Quick.Serializer.Intf.pas

@@ -0,0 +1,24 @@
+unit Quick.Serializer.Intf;
+
+interface
+
+uses
+  System.SysUtils,
+  {$IFNDEF FPC}
+  rtti;
+  {$ELSE}
+  rttiutils;
+  {$ENDIF}
+
+type
+  ISerializer = interface
+  ['{CA26F7AE-F1FE-41BE-9C23-723A687F60D1}']
+    function JsonToObject(aType: TClass; const aJson: string): TObject; overload;
+    function JsonToObject(aObject: TObject; const aJson: string): TObject; overload;
+    function ObjectToJson(aObject : TObject; aIndent : Boolean = False): string;
+    function ValueToJson(const aValue : TValue; aIndent : Boolean = False) : string;
+  end;
+
+implementation
+
+end.