public static JProperty CreateQueryComponent(this IFilterComponent comp) { var type = comp.GetType(); var props = type.GetProperties(); JObject filterGroup = new JObject(); JObject filters = new JObject(); foreach (var prop in props) { var value = prop.GetValue(comp); if (value == null) { continue; } var attr = prop.CustomAttributes.OfType <QueryComponentAttribute>().FirstOrDefault(); if (attr == null || attr.Ignore) { continue; } var filter = new JObject(); if (prop.PropertyType == typeof(RangeFilter)) { filter[attr.Name] = ParseRange((RangeFilter)value); } else if (prop.PropertyType.IsEnum) { filter[attr.Name] = ParseOption((Enum)value); } else { filter[attr.Name] = new JValue(value); } filters.Add(filter); } filterGroup["filters"] = filters; return(new JProperty(type.GetCustomAttributes(false).OfType <QueryComponentAttribute>().First().Name, filterGroup)); }
public FilterComponentNotSupportedException(IFilterComponent component) : base($"filter component of type {component.GetType()} is not supported.") { }