> On Oct 17, 2022, at 2:48 PM, Michael Van Canneyt via fpc-pascal
> <[email protected]> wrote:
>
> Small follow-up:
>
> If you want to extend it, you can find the necessary code in the restbase
> unit. It already implements the necessary code to (de)stream arrays, plus
> some other enhancements as well. It's on my TODO list to merge the
> implementations taking TJSONStreamer as a base, but if you are busy with this
> maybe you can provide a patch...
I probably don’t know enough about the library to do this well or quickly
enough. This is what I hacked together but it only works on the 2 array types I
need and I may not have done this correctly even.
function TLSPStreamer.StreamProperty(Const AObject: TObject; PropertyInfo:
PPropInfo): TJSONData;
type
TVariantArray = array of Variant;
TObjectArray = array of TObject;
var
PropArray: TJSONArray;
ElementType: PTypeInfo;
VariantArray: TVariantArray;
ObjectArray: TObjectArray;
i: integer;
begin
Result := nil;
if PropertyInfo^.PropType^.Kind = tkDynArray then
begin
// Class kinds are in ElType2 (not sure why)
ElementType := GetTypeData(PropertyInfo^.PropType)^.ElType;
if ElementType = nil then
ElementType := GetTypeData(PropertyInfo^.PropType)^.ElType2;
PropArray := TJSONArray.Create;
case ElementType^.Kind of
tkVariant:
begin
VariantArray := TVariantArray(GetDynArrayProp(AObject,
PropertyInfo));
for i := 0 to High(VariantArray) do
PropArray.Add(StreamVariant(VariantArray[i]));
Result := PropArray;
end;
tkClass:
begin
ObjectArray := TObjectArray(GetDynArrayProp(AObject, PropertyInfo));
for i := 0 to High(ObjectArray) do
PropArray.Add(StreamClassProperty(ObjectArray[i]));
result := PropArray;
end;
otherwise
raise EUnknownErrorCode.Create('Dynamic array element type
"'+Integer(ElementType^.Kind).ToString+'" is not supported for responses.');
end;
end
else
Result := inherited StreamProperty(AObject, PropertyInfo);
end;
Regards,
Ryan Joseph
_______________________________________________
fpc-pascal maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal