> On Oct 17, 2022, at 2:48 PM, Michael Van Canneyt via fpc-pascal > <fpc-pascal@lists.freepascal.org> 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 - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal