private async Task <IDictionary <string, dynamic> > RecursiveCheckAndCreate(string targetMapping, IElement element, FormAnswers formAnswers, IDictionary <string, dynamic> obj)
        {
            var splitTargets = targetMapping.Split(".");

            if (element.Properties.IsDynamicallyGeneratedElement)
            {
                return(obj);
            }

            if (splitTargets.Length.Equals(1))
            {
                if (element.Type == EElementType.FileUpload || element.Type == EElementType.MultipleFileUpload)
                {
                    return(await CheckAndCreateForFileUpload(splitTargets[0], element, formAnswers, obj));
                }

                if (element.Type == EElementType.AddAnother)
                {
                    return(await CheckAndCreateForAddAnother(splitTargets[0], element, formAnswers, obj));
                }

                object answerValue = await _elementMapper.GetAnswerValue(element, formAnswers);


                if (answerValue is not null && obj.TryGetValue(splitTargets[0], out var objectValue))
                {
                    var combinedValue = $"{objectValue} {answerValue}";
                    obj.Remove(splitTargets[0]);
                    obj.Add(splitTargets[0], combinedValue.Trim());
                    return(obj);
                }

                if (answerValue is not null)
                {
                    obj.Add(splitTargets[0], answerValue);
                }

                return(obj);
            }

            object subObject;

            if (!obj.TryGetValue(splitTargets[0], out subObject))
            {
                subObject = new ExpandoObject();
            }

            subObject = await RecursiveCheckAndCreate(targetMapping.Replace($"{splitTargets[0]}.", ""), element, formAnswers, subObject as IDictionary <string, dynamic>);

            obj.Remove(splitTargets[0]);
            obj.Add(splitTargets[0], subObject);

            return(obj);
        }
        private IDictionary <string, dynamic> RecursiveCheckAndCreate(string targetMapping, IElement element, FormAnswers formAnswers, IDictionary <string, dynamic> obj)
        {
            var splitTargets = targetMapping.Split(".");

            if (splitTargets.Length == 1)
            {
                if (element.Type == EElementType.FileUpload || element.Type == EElementType.MultipleFileUpload)
                {
                    return(CheckAndCreateForFileUpload(splitTargets[0], element, formAnswers, obj));
                }

                object answerValue = _elementMapper.GetAnswerValue(element, formAnswers);
                if (answerValue != null && obj.TryGetValue(splitTargets[0], out var objectValue))
                {
                    var combinedValue = $"{objectValue} {answerValue}";
                    obj.Remove(splitTargets[0]);
                    obj.Add(splitTargets[0], combinedValue.Trim());
                    return(obj);
                }

                if (answerValue != null)
                {
                    obj.Add(splitTargets[0], answerValue);
                }

                return(obj);
            }

            object subObject;

            if (!obj.TryGetValue(splitTargets[0], out subObject))
            {
                subObject = new ExpandoObject();
            }

            subObject = RecursiveCheckAndCreate(targetMapping.Replace($"{splitTargets[0]}.", ""), element, formAnswers, subObject as IDictionary <string, dynamic>);

            obj.Remove(splitTargets[0]);
            obj.Add(splitTargets[0], subObject);

            return(obj);
        }