private List <object> GetObjects(ParameterValueData parameterValueData) { if (!parameterValueData.Values.Any()) { return(new List <object>()); } var result = new List <object>(); var domainTypes = parameterValueData.Values.Select(GetDomainType).ToList(); if (domainTypes.Any(dt => !Equals(dt, ParameterType))) { for (var i = 0; i < parameterValueData.Values.Count; i++) { var parameterData = parameterValueData.Values[i]; var domainType = domainTypes[i]; result.Add(domainType.Locate(parameterData)); } } else { result.AddRange(ParameterType.LocateMany(parameterValueData.Values)); } return(result); }
public ParameterValueData DecompressParameterValueData(object @object) { if (@object is null or string or Dictionary <string, object> ) { return(new ParameterValueData { Values = new List <ParameterData> { DecompressParameterData(@object) } }); } if (@object is not object[] objects) { throw new ArgumentException("Given parameter value should be null, string, Dictionary<string, object> or object[], but was " + @object, nameof(@object)); } var result = new ParameterValueData { IsList = true }; foreach (var value in objects) { result.Values.Add(DecompressParameterData(value)); } return(result); }
internal object Locate(ParameterValueData parameterValueData) { if (!IsList) { return(GetObject(parameterValueData)); } var result = parameter.ParameterType.CreateListInstance(parameterValueData.Values.Count); var objects = GetObjects(parameterValueData); for (var i = 0; i < objects.Count; i++) { if (parameter.ParameterType.IsArray) { result[i] = objects[i]; } else { result.Add(objects[i]); } } return(result); }
private object GetObject(ParameterValueData parameterValueData) { if (!parameterValueData.Values.Any()) { return(null); } var parameterData = parameterValueData.Values[0]; return(GetDomainType(parameterData).Locate(parameterData)); }
public object Compress(ParameterValueData source) { if (source == null) { return(null); } if (!source.IsList) { return(source.Values.Count <= 0 ? null : Compress(source.Values[0])); } return(source.Values.Select(Compress).ToList()); }