diff --git a/src/UESaveFile/Serialisers/StructSerialiser.cpp b/src/UESaveFile/Serialisers/StructSerialiser.cpp index 58d08d4..8ff7d06 100644 --- a/src/UESaveFile/Serialisers/StructSerialiser.cpp +++ b/src/UESaveFile/Serialisers/StructSerialiser.cpp @@ -55,13 +55,19 @@ auto StructSerialiser::deserialise(const std::string& name, const std::string& t } else { for(UnsignedInt i = 0; i < count; i++) { - auto prop = readStructValue(name, item_type, value_length, reader, serialiser); + auto prop = Containers::pointer(); + + prop = serialiser.readItem(reader, item_type, UnsignedLong(-1), name); + + if(!prop) { + prop = readStructValue(name, item_type, value_length, reader, serialiser); + } if(!prop) { return nullptr; } - prop->structGuid = guid; + static_cast(prop.get())->structGuid = guid; arrayAppend(array, std::move(prop)); } @@ -131,8 +137,10 @@ auto StructSerialiser::serialise(Containers::ArrayView return false; } - if(!writeStructValue(struct_prop, bytes_written_here, writer, serialiser)) { - return false; + if(!serialiser.writeItem(prop, struct_prop->structType, bytes_written_here, writer)) { + if(!writeStructValue(struct_prop, bytes_written_here, writer, serialiser)) { + return false; + } } }