Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        private object GetObject(ParameterValueData parameterValueData)
        {
            if (!parameterValueData.Values.Any())
            {
                return(null);
            }

            var parameterData = parameterValueData.Values[0];

            return(GetDomainType(parameterData).Locate(parameterData));
        }
Пример #5
0
        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());
        }