Non Class/Struct Root
Sometimes you just want to deserialize something into an TArray/TMap/TSet
. Then you'll realize that you don't have something corresponding to StaticClass()/StaticStruct()
as root to pass to DataConfig.
// DataConfigTests/Private/DcTestBlurb2.cpp
FString Fixture = TEXT("[1,2,3,4,5]");
TArray<int> Arr;
Turns out you can create adhoc FProperty
without USTRUCT/UCLASS
parents and use them just fine. In DataConfig we've provided DcPropertyUtils::FDcPropertyBuilder
to ease this use case.
// DataConfigTests/Private/DcTestBlurb2.cpp
// create int array property
using namespace DcPropertyUtils;
auto ArrProp = FDcPropertyBuilder::Array(
FDcPropertyBuilder::Int()
).LinkOnScope();
FDcJsonReader Reader{Fixture};
DC_TRY(DcAutomationUtils::DeserializeFrom(&Reader, FDcPropertyDatum(ArrProp.Get(), &Arr)));
// validate results
check(Arr.Num() == 5);
check(Arr[4] == 5);
Note that FDcPropertyBuilder
would create a heap allocated FProperty
and LinkOnScope()
returns a TUniquePtr
. You might want to cache the properties if used repeatedly.