diff --git a/src/ArduinoJson/Json/JsonDeserializer.hpp b/src/ArduinoJson/Json/JsonDeserializer.hpp index 696870b3..eb27a57b 100644 --- a/src/ArduinoJson/Json/JsonDeserializer.hpp +++ b/src/ArduinoJson/Json/JsonDeserializer.hpp @@ -71,7 +71,7 @@ class JsonDeserializer { switch (current()) { case '[': if (filter.allowArray()) - return parseArray(VariantImpl(variant, resources_).toArray(), filter, + return parseArray(VariantImpl::toArray(variant, resources_), filter, nestingLimit); else return skipArray(nestingLimit); diff --git a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp index 4077e243..c8ce92cf 100644 --- a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp @@ -352,7 +352,7 @@ class MsgPackDeserializer { ArrayImpl array; if (allowArray) { ARDUINOJSON_ASSERT(variant != 0); - array = VariantImpl(variant, resources_).toArray(); + array = VariantImpl::toArray(variant, resources_); } TFilter elementFilter = filter[0U]; diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 72741243..d46c2312 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -478,9 +478,15 @@ class VariantImpl { } ArrayImpl toArray() { - ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first if (!data_) return ArrayImpl(); + return toArray(data_, resources_); + } + + static ArrayImpl toArray(VariantData* data_, ResourceManager* resources_) { + ARDUINOJSON_ASSERT(data_ != nullptr); + ARDUINOJSON_ASSERT(data_->type == VariantType::Null); + ARDUINOJSON_ASSERT(resources_ != nullptr); data_->type = VariantType::Array; return ArrayImpl(new (&data_->content.asCollection) CollectionData(), resources_);