private void BuildJson(JObject obj, string objName) { while (true) { var addPropQuestion = $"Do you want to add a property to the {objName} object?"; var addPropChoice = FacadeLib.YesOrNo[Asker.GetChoiceFromList(addPropQuestion, FacadeLib.YesOrNo)]; switch (addPropChoice) { case "No": Console.WriteLine(obj.Root); return; case "Yes": var name = FacadeLib.GetNameOrValue("new", NameOrValue.Name, XmlOrJson.Json); var newProp = new JProperty(name); obj.AddAndPrint(newProp); var addObjQuestion = $"Is the value of the {name} property another object?"; var addObjChoice = FacadeLib.YesOrNo[Asker.GetChoiceFromList(addObjQuestion, FacadeLib.YesOrNo)]; if (addObjChoice == "Yes") { var newObj = new JObject(); obj[name] = newObj; Console.WriteLine(obj.Root); BuildJson(newObj, name); } else { var value = FacadeLib.GetNameOrValue(name, NameOrValue.Value, XmlOrJson.Json); obj[name] = value; Console.WriteLine(obj.Root); } break; default: break; } } }