/// <inheritdoc/>
        public void SendFormData(IDictionary <string, string> data, ConnectorFormDataContext dataContext)
        {
            try
            {
                string listId = this.GetListId(dataContext);

                string email = data[FieldNameConstants.Email];
                data.Remove(FieldNameConstants.Email);

                data = this.ReplaceKeysWithMergeFieldTags(listId, data);

                MailchimpListMember mailchimpListMember = new MailchimpListMember();
                mailchimpListMember.Email       = email;
                mailchimpListMember.MergeFields = data;
                mailchimpListMember.Status      = SubscriberStatus.Subscribed;

                this.mailchimpListsClient.CreateMember(listId, mailchimpListMember);
            }
            catch (Exception ex)
            {
                Log.Write(ex, TraceEventType.Error);
            }
        }
        /// <inheritdoc/>
        public MailchimpListMember CreateMember(string id, MailchimpListMember mailchimpListMember)
        {
            if (string.IsNullOrWhiteSpace(id))
            {
                throw new ArgumentNullException("id");
            }

            if (mailchimpListMember == null)
            {
                throw new ArgumentNullException("mailchimpListMember");
            }

            string url = string.Format(
                CultureInfo.InvariantCulture,
                "/{0}/{1}/{2}/{3}",
                MailchimpListClient.ApiVersion,
                MailchimpListClient.ListsApiUrlSegment,
                id,
                MailchimpListClient.MembersApiUrlSegment);

            var settings = new JsonSerializerSettings();

            settings.Converters.Add(new StringEnumConverter(true));

            var mailchimpListJson        = JsonConvert.SerializeObject(mailchimpListMember, settings);
            var mailchimpFormHttpContent = new StringContent(mailchimpListJson, Encoding.UTF8, ApplicationJsonContentType);

            HttpResponseMessage httpResponseMessage = this.httpClient.PostAsync(url, mailchimpFormHttpContent).Result;

            httpResponseMessage.EnsureSuccessStatusCode();

            string responseContent = httpResponseMessage.Content.ReadAsStringAsync().Result;
            MailchimpListMember mailchimpListMemberResult = JsonConvert.DeserializeObject <MailchimpListMember>(responseContent);

            return(mailchimpListMemberResult);
        }
        public IActionResult AddListMembers([FromBody] MailchimpListMember member, string listId)
        {
            var service = new MailchimpService(_settings);

            if (member.Interest != null)
            {
                var interests      = service.Read($"/lists/{listId}/interest-categories", null);
                var interestObject = (ApiResponse)interests;
                var dataString     = JsonConvert.SerializeObject(interestObject.Data);
                var categories     = JObject.Parse(dataString)["categories"].ToObject <List <Category> >();

                foreach (var category in categories)
                {
                    if (category.Title == "Interest")
                    {
                        var groups = service.Read($"/lists/{listId}/interest-categories/{category.Id}/interests", null);

                        var groupResponseObject = (ApiResponse)groups;
                        var groupString         = JsonConvert.SerializeObject(groupResponseObject.Data);
                        var groupInterests      = JObject.Parse(groupString)["interests"].ToObject <List <DTO.Mailchimp.Interest> >();

                        var selectedInterest = groupInterests.Where(i => i.name == member.Interest).FirstOrDefault();
                        var memberInterests  = new ExpandoObject();
                        memberInterests.TryAdd(selectedInterest.id, true);

                        var memberObject = new
                        {
                            email_address = member.Email,
                            status        = "subscribed",
                            merge_fields  = new
                            {
                                FNAME = member.FirstName,
                                LNAME = member.LastName,
                            },
                            interests        = memberInterests,
                            timestamp_signup = DateTime.UtcNow.ToString("yyyy-MM-dd hh:mm:ss"),
                            tags             = member.Tags,
                        };

                        var response = service.Create($"/lists/{listId}/members", memberObject);

                        return(Ok(response));
                    }
                }

                return(Ok("Provided Interest not found. No contact Added"));
            }
            else
            {
                var memberObject = new
                {
                    email_address    = member.Email,
                    status           = "subscribed",
                    timestamp_signup = DateTime.Now.ToString(),
                    tags             = member.Tags.ToArray(),
                };

                var response = service.Create($"/lists/{listId}/members", memberObject);

                return(Ok(response));
            }
        }