FJsonObjectConverter::JsonObjectToUStruct removes _ClassName from nested JSON objects during deserialization.
Removing Obj->RemoveField(ObjectClassNameKey) from ConvertScalarJsonValueToFPropertyWithContainer appears to fix the issue.
This is problematic for cases where the same in-memory FJsonObject is deserialized more than once and _ClassName is needed to resolve a concrete subclass.
Reproduced in UE 5.6, 5.7, and UE5-Main at CL 51575875.
A repro project is attached where an instanced UObject array is declared as an abstract base type and populated with a derived object instance before being serialized to an in-memory FJsonObject. When that same FJsonObject is then deserialized multiple times, only the first import succeeds. Subsequent imports fail because _ClassName was removed during the first call, so the later import attempts fall back to the abstract declared type, which cannot be instantiated.[Link Removed]
1. Open the attached repro project
2. Start PIE
3. Observe the output log. Second conversion performed in AJsonReproActor::ConvertJson fails and outputs
LogJson: Error: JsonValueToUProperty - Unable to import JSON object into ... property Objects. Class is abstract.
LogJson: Error: JsonValueToUProperty - Unable to import Array element 0 for property Objects
LogJson: Error: JsonObjectToUStruct - Unable to import JSON value into property Objects
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-370446 in the post.
| 0 |
| Component | UE - Foundation |
|---|---|
| Affects Versions | 5.6, 5.7, 5.8 |
| Created | Mar 18, 2026 |
|---|---|
| Updated | Mar 23, 2026 |