This may not be the issue, but in your recursive method you are setting global variable value from within the for loop, outside the lambda, so it cannot work as expected there.
In the for loop, you should probably declare it as a local variable (shared ptr), capture it (by value) in the lambda, and assign it to the global variable once in the lambda, like so
auto NextDialogueJsonObject = MakeShareable(...);
ChoiceButton->LambdaEvent.BindLambda([this, NextDialogueJsonObject]() {
this->CurrentDialogueJsonObject = NextDialogueJsonObject;
this->ParseDialogue(this->ConvoWidget, this->Container);
});
Alternatively, passing the shared ptr as a function parameter should also do the job, without requiring a global var, unless you also need it somewhere else.
Also regarding the issue, I’d start by removing those std::move statements.
