private void CreateDelegateHolders() { var bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy; DelegateHolders = new Dictionary <string, IDelegateHolder>(); EventProperties = InterfaceType.GetEvents(bindingFlags); DelegateProperties = InterfaceType.GetProperties(bindingFlags) .Where(p => typeof(Delegate).IsAssignableFrom(p.PropertyType)) .ToArray(); foreach (var eventProperty in EventProperties) { DelegateHolders[eventProperty.Name] = CreateDelegateHolder(eventProperty.EventHandlerType); } foreach (var delegateProperty in DelegateProperties) { DelegateHolders[delegateProperty.Name] = CreateDelegateHolder(delegateProperty.PropertyType); } }
protected Model_Should() { ModelType = InternalModel.TypeFor(InterfaceType); var tmp = InterfaceType .GetProperties(BindingFlags.Public | BindingFlags.Instance) .OrderBy(x => x.Name) .Select(x => new PropInfo() { Property = x }) .ToArray(); foreach (var p in tmp) { var sib = ModelType.GetProperty(p.Property.Name); var attr = sib?.GetCustomAttribute <JsonPropertyAttribute>(); p.Name = attr?.PropertyName ?? p.Property.Name; p.Deserialize = p.Property.CanRead && (sib.GetCustomAttribute <JsonIgnoreAttribute>() is null); p.Serialize = p.Deserialize && p.Property.CanWrite; } Properties = tmp.Cast <IPropInfo>().ToArray(); }