/// <summary> /// Track a new event /// </summary> /// <returns>The response from mixpanel</returns> /// <param name="profile">Profile.</param> /// <param name="mixpanelEvent">Mixpanel event.</param> public Task <MixpanelResponse> Track(Profile profile, IMixpanelEvent mixpanelEvent) { if (mixpanelEvent == null) { throw new ArgumentNullException(nameof(mixpanelEvent)); } var eventName = mixpanelEvent.EventName; var properties = MixpanelEventConverter.ToDictionary(mixpanelEvent); return(Track(profile, eventName, properties)); }
public static Dictionary <string, object> ToDictionary(IMixpanelEvent mixpanelEvent) { const string eventNamePropertyName = nameof(mixpanelEvent.EventName); var dictionary = new Dictionary <string, object> (); var eventName = mixpanelEvent.EventName; var type = mixpanelEvent.GetType(); var fields = type.GetRuntimeFields().ToArray(); var properties = type.GetRuntimeProperties().ToArray(); foreach (var p in properties) { if (p.Name == eventNamePropertyName) { continue; } var ignoreAttribute = p.GetCustomAttribute <MixpanelIgnoreAttribute> (); if (ignoreAttribute != null) { continue; } var propertyName = GetPropertyNameFromAttribute(p) ?? PropertyNameConverter.ToSpacedString(p.Name); var propertyValue = p.GetValue(mixpanelEvent); dictionary.Add(propertyName, propertyValue); } foreach (var f in fields) { var propertyAttribute = f.GetCustomAttribute <MixpanelPropertyAttribute> (); if (propertyAttribute == null) { continue; } var fieldName = GetPropertyNameFromAttribute(f) ?? PropertyNameConverter.ToSpacedString(f.Name); var fieldValue = f.GetValue(mixpanelEvent); dictionary.Add(fieldName, fieldValue); } return(dictionary); }
/// <summary> /// Track a new event /// </summary> /// <returns>The response from mixpanel</returns> /// <param name="mixpanelEvent">Mixpanel event.</param> public Task <MixpanelResponse> Track(IMixpanelEvent mixpanelEvent) { return(Track(null, mixpanelEvent)); }