コード例 #1
0
        private static PropertyInfo[] GetEnumerableIndexablePropertyInfos(
            PropertyInfo[] properties,
            IStructureProperty parent = null,
            ICollection <string> nonIndexablePaths = null,
            ICollection <string> indexablePaths    = null)
        {
            if (properties.Length == 0)
            {
                return(new PropertyInfo[0]);
            }

            var filteredProperties = properties.Where(p =>
                                                      !p.PropertyType.IsSimpleType() &&
                                                      p.PropertyType.IsEnumerableType() &&
                                                      !p.PropertyType.IsEnumerableBytesType());

            if (nonIndexablePaths != null && nonIndexablePaths.Any())
            {
                filteredProperties = filteredProperties.Where(p => !nonIndexablePaths.Contains(
                                                                  PropertyPathBuilder.BuildPath(parent, p.Name)));
            }

            if (indexablePaths != null && indexablePaths.Any())
            {
                filteredProperties = filteredProperties.Where(p => indexablePaths.Contains(
                                                                  PropertyPathBuilder.BuildPath(parent, p.Name)));
            }

            return(filteredProperties.ToArray());
        }
コード例 #2
0
        public StructureProperty(StructurePropertyInfo info, DynamicGetter getter)
        {
            _info   = info;
            _getter = getter;

            IsRootMember    = info.Parent == null;
            IsEnumerable    = !DataType.IsSimpleType() && DataType.IsEnumerableType();
            IsElement       = Parent != null && (Parent.IsElement || Parent.IsEnumerable);
            ElementDataType = IsEnumerable ? DataType.GetEnumerableElementType() : null;
            Path            = PropertyPathBuilder.BuildPath(this);
        }