|
7 | 7 | Author : Kike Pérez
|
8 | 8 | Version : 1.11
|
9 | 9 | Created : 21/05/2018
|
10 |
| - Modified : 07/04/2020 |
| 10 | + Modified : 27/04/2020 |
11 | 11 |
|
12 | 12 | This file is part of QuickLib: https://github.com/exilon/QuickLib
|
13 | 13 |
|
@@ -49,12 +49,15 @@ interface
|
49 | 49 | {$ELSE}
|
50 | 50 | {$IFDEF DELPHIXE7_UP}
|
51 | 51 | System.Json,
|
| 52 | + {$ELSE} |
| 53 | + Data.DBXJSON, |
52 | 54 | {$ENDIF}
|
53 | 55 | {$IFDEF DELPHIRX10_UP}
|
54 | 56 |
|
55 | 57 | {$ENDIF}
|
56 | 58 | Variants,
|
57 | 59 | {$ENDIF}
|
| 60 | + Generics.Collections, |
58 | 61 | Quick.RTTI.Utils,
|
59 | 62 | DateUtils,
|
60 | 63 | Quick.Commons,
|
@@ -83,6 +86,30 @@ TCustomNameProperty = class(TCustomAttribute)
|
83 | 86 | constructor Create(const aName: string);
|
84 | 87 | property Name : string read fName;
|
85 | 88 | end;
|
| 89 | + {$IFNDEF DELPHIXE7_UP} |
| 90 | + TJSONArrayHelper = class helper for Data.DBXJson.TJSONArray |
| 91 | + private |
| 92 | + function GetItem(aValue : Integer) : TJSONValue; |
| 93 | + public |
| 94 | + function Count : Integer; |
| 95 | + property Items[index : Integer] : TJSONValue read GetItem; |
| 96 | + procedure SetElements(aElements : TList<TJSONValue>); |
| 97 | + end; |
| 98 | + |
| 99 | + TJSONValueHelper = class helper for Data.DBXJson.TJSONValue |
| 100 | + public |
| 101 | + function ToJson : string; |
| 102 | + end; |
| 103 | + |
| 104 | + TJSONObjectHelper = class helper for Data.DBXJson.TJSONObject |
| 105 | + private |
| 106 | + function GetPair(aValue : Integer) : TJSONPair; |
| 107 | + public |
| 108 | + function Count : Integer; |
| 109 | + function GetValue(const aName : string) : TJSONValue; |
| 110 | + property Pairs[index : Integer] : TJSONPair read GetPair; |
| 111 | + end; |
| 112 | + {$ENDIF} |
86 | 113 | {$ENDIF}
|
87 | 114 |
|
88 | 115 | IJsonSerializer = interface
|
@@ -190,9 +217,6 @@ EJsonSerializerError = class(Exception);
|
190 | 217 |
|
191 | 218 | implementation
|
192 | 219 |
|
193 |
| -uses |
194 |
| - Generics.Collections; |
195 |
| - |
196 | 220 | { TRTTIJson }
|
197 | 221 |
|
198 | 222 | {$IFNDEF FPC}
|
@@ -394,7 +418,7 @@ function TRTTIJson.DeserializeRecord(const aRecord : TValue; aObject : TObject;
|
394 | 418 | {$IFDEF DELPHIRX10_UP}
|
395 | 419 | rValue := DeserializeType(aObject,rField.FieldType.TypeKind,rField.FieldType.Handle,TJsonValue(member).value)
|
396 | 420 | {$ELSE}
|
397 |
| - rValue := DeserializeType(aObject,rField.FieldType.TypeKind,rField.FieldType.Handle,member.JsonString.ToString) |
| 421 | + rValue := DeserializeType(aObject,rField.FieldType.TypeKind,rField.FieldType.Handle,member.Value) |
398 | 422 | {$ENDIF}
|
399 | 423 | else rValue := DeserializeType(aObject,rField.FieldType.TypeKind,rField.FieldType.Handle,member.ToJSON);
|
400 | 424 | end;
|
@@ -677,7 +701,7 @@ function TRTTIJson.DeserializeProperty(aObject : TObject; const aName : string;
|
677 | 701 | {$IFDEF DELPHIRX10_UP}
|
678 | 702 | rValue := DeserializeType(aObject,aProperty.PropertyType.TypeKind,aProperty.GetValue(aObject).TypeInfo,TJsonValue(member).value)
|
679 | 703 | {$ELSE}
|
680 |
| - rValue := DeserializeType(aObject,aProperty.PropertyType.TypeKind,aProperty.GetValue(aObject).TypeInfo,member.JsonString.ToString) |
| 704 | + rValue := DeserializeType(aObject,aProperty.PropertyType.TypeKind,aProperty.GetValue(aObject).TypeInfo,member.Value) |
681 | 705 | {$ENDIF}
|
682 | 706 | else rValue := DeserializeType(aObject,aProperty.PropertyType.TypeKind,aProperty.GetValue(aObject).TypeInfo,member.ToJSON);
|
683 | 707 | {$ELSE}
|
@@ -1702,6 +1726,59 @@ constructor TCustomNameProperty.Create(const aName: string);
|
1702 | 1726 | end;
|
1703 | 1727 | {$ENDIF}
|
1704 | 1728 |
|
| 1729 | +{$IF NOT DEFINED(DELPHIXE7_UP) AND NOT DEFINED(FPC)} |
| 1730 | +{ TJSONArrayHelper } |
| 1731 | + |
| 1732 | +function TJSONArrayHelper.Count: Integer; |
| 1733 | +begin |
| 1734 | + Result := Self.Size; |
| 1735 | +end; |
| 1736 | + |
| 1737 | +function TJSONArrayHelper.GetItem(aValue: Integer): TJSONValue; |
| 1738 | +begin |
| 1739 | + Result := Self.Get(aValue); |
| 1740 | +end; |
| 1741 | + |
| 1742 | +procedure TJSONArrayHelper.SetElements(aElements: TList<TJSONValue>); |
| 1743 | +var |
| 1744 | + jvalue : TJSONValue; |
| 1745 | +begin |
| 1746 | + for jvalue in aElements do Self.AddElement(jvalue); |
| 1747 | + aElements.Free; |
| 1748 | +end; |
| 1749 | + |
| 1750 | +{ TJSONValueHelper } |
| 1751 | + |
| 1752 | +function TJSONValueHelper.ToJson: string; |
| 1753 | +begin |
| 1754 | + Result := Self.ToString; |
| 1755 | +end; |
| 1756 | + |
| 1757 | + |
| 1758 | +{ TJSONObjectHelper } |
| 1759 | + |
| 1760 | +function TJSONObjectHelper.Count: Integer; |
| 1761 | +begin |
| 1762 | + Result := Self.Size; |
| 1763 | +end; |
| 1764 | + |
| 1765 | +function TJSONObjectHelper.GetValue(const aName: string): TJSONValue; |
| 1766 | +var |
| 1767 | + jPair : TJSONPair; |
| 1768 | +begin |
| 1769 | + Result := nil; |
| 1770 | + for jPair in Self do |
| 1771 | + begin |
| 1772 | + if jPair.JsonString.ToString = aName then Exit(jPair.JsonValue); |
| 1773 | + end; |
| 1774 | +end; |
| 1775 | + |
| 1776 | +function TJSONObjectHelper.GetPair(aValue: Integer) : TJSONPair; |
| 1777 | +begin |
| 1778 | + Result := Self.Get(aValue); |
| 1779 | +end; |
| 1780 | + |
| 1781 | +{$ENDIF} |
1705 | 1782 |
|
1706 | 1783 | end.
|
1707 | 1784 |
|
|
0 commit comments