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); }