diff --git a/src/ArduinoJson/Json/JsonDeserializer.hpp b/src/ArduinoJson/Json/JsonDeserializer.hpp index eb27a57b..dfb1f165 100644 --- a/src/ArduinoJson/Json/JsonDeserializer.hpp +++ b/src/ArduinoJson/Json/JsonDeserializer.hpp @@ -78,8 +78,8 @@ class JsonDeserializer { case '{': if (filter.allowObject()) - return parseObject(VariantImpl(variant, resources_).toObject(), - filter, nestingLimit); + return parseObject(VariantImpl::toObject(variant, resources_), filter, + nestingLimit); else return skipObject(nestingLimit); diff --git a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp index c8ce92cf..f3d280d7 100644 --- a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp @@ -388,7 +388,7 @@ class MsgPackDeserializer { ObjectImpl object; if (filter.allowObject()) { ARDUINOJSON_ASSERT(variant != 0); - object = VariantImpl(variant, resources_).toObject(); + object = VariantImpl::toObject(variant, resources_); } for (; n; --n) { diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index d46c2312..09be5999 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -493,9 +493,15 @@ class VariantImpl { } ObjectImpl toObject() { - ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first if (!data_) return ObjectImpl(); + return toObject(data_, resources_); + } + + static ObjectImpl toObject(VariantData* data_, ResourceManager* resources_) { + ARDUINOJSON_ASSERT(data_ != nullptr); + ARDUINOJSON_ASSERT(data_->type == VariantType::Null); + ARDUINOJSON_ASSERT(resources_ != nullptr); data_->type = VariantType::Object; return ObjectImpl(new (&data_->content.asCollection) CollectionData(), resources_);