Procházet zdrojové kódy

[jsonSerializer, yamlSerializer] Serialize Interface based types on XE10 and above, excluding OLE or native iOS/Android ones

Vladimir Georgiev před 3 roky
rodič
revize
e9a1e7c627
2 změnil soubory, kde provedl 16 přidání a 2 odebrání
  1. 8 1
      Quick.Json.Serializer.pas
  2. 8 1
      Quick.YAML.Serializer.pas

+ 8 - 1
Quick.Json.Serializer.pas

@@ -1368,6 +1368,13 @@ begin
       begin
          Result := TJSONValue(SerializeObject(aValue.AsObject));
       end;
+    tkInterface :
+      begin
+        {$IFDEF DELPHIRX10_UP}
+        // Would not work with iOS/Android native interfaces
+        Result := TJSONValue(SerializeObject(aValue.AsInterface as TObject));
+        {$ENDIF}
+      end;
     tkString, tkLString, tkWString, tkUString :
       begin
         Result := TJSONString.Create(aValue.AsString);
@@ -1447,7 +1454,7 @@ begin
         end;
         {$ENDIF}
       end;
-    tkMethod, tkPointer, tkClassRef ,tkInterface, tkProcedure, tkUnknown :
+    tkMethod, tkPointer, tkClassRef, tkProcedure, tkUnknown :
       begin
         //skip these properties
       end

+ 8 - 1
Quick.YAML.Serializer.pas

@@ -1204,6 +1204,13 @@ begin
         begin
            Result.Value := TYamlValue(Serialize(aValue.AsObject));
         end;
+      tkInterface :
+        begin
+          {$IFDEF DELPHIRX10_UP}
+          // Would not work with all interfaces, like iOS/Android native ones
+          Result.Value := TYamlValue(Serialize(aValue.AsInterface as TObject));
+          {$ENDIF}
+        end;
       tkString, tkLString, tkWString, tkUString :
         begin
           Result.Value := TYamlString.Create(aValue.AsString);
@@ -1270,7 +1277,7 @@ begin
             ctx.Free;
           end;
         end;
-      tkMethod, tkPointer, tkClassRef ,tkInterface, tkProcedure :
+      tkMethod, tkPointer, tkClassRef, tkProcedure :
         begin
           //skip these properties
           //FreeAndNil(Result);