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