Получение данных из API Mixpanel в C#

Я пытаюсь получить данные из API Mixpanel. Результат JSON выглядит так:

{"computed_at": "2019-11-19T10:36:33.908802+00:00", "legend_size": 1, "data": {"series": ["2019-11-11", "2019-11-12", "2019-11-13"], "values": {"page views": {"2019-11-12": 111, "2019-11-11": 573, "2019-11-13": 209}}}}

Я хочу заполнить этот объект значениями:

 public class ResultData
    {
        public string Title { get; set; }
        public int Value { get; set; }
        public string Category { get; set; }
    }

В частности, я хочу, чтобы ResultData.Value было суммой 111, 573 и 209 (просмотры страниц за 3 дня). Может ли кто-нибудь помочь мне разобраться, как это сделать?

Это то, что я пробовал до сих пор:

  public async Task<ResultData> GetData()
        {
            using (var client = new HttpClient())
            {
                try
                {
                    var formattedDateFrom = DateTime.Today.AddDays(-1).ToString("yyyy-MM-dd");
                    var formattedDateTo = DateTime.Now.ToString("yyyy-MM-dd");
                    string baseUrl = "https://mixpanel.com/api/2.0/segmentation?from_date=" + formattedDateFrom + "&to_date=" + formattedDateTo + "&event=patient+-+booking+-+booked+appointment";

                    var response = await client.GetAsync(baseUrl);

                    var stringResult = await response.Content.ReadAsStringAsync();
                    var rawData = JsonConvert.DeserializeObject<ResultData>(stringResult);

                    var mixpanelResult = new ResultData();
                    mixpanelResult.Value = rawData.Value;
                    mixpanelResult.Title = "Page Views";

                    return await Task.FromResult(mixpanelResult);

                } catch (HttpRequestException httpRequestException)
                {
                    // Not sure what to put here but will try and work it out later 
                }

            }
        }

Я знаю, что rawData.Value неверно, так как это должна быть сумма просмотров страниц, но на данный момент это даже не десериализация. Когда я добавляю точку останова, rawData представляет собой не что иное, как baseUrl

Я немного новичок во всем этом, и любая помощь будет очень признательна. Большое спасибо заранее!


person Jordan1993    schedule 19.11.2019    source источник


Ответы (1)


Что ж, в вашем случае ваши ключи json являются динамическими, поэтому мы не можем deserialize использовать их на основе какого-либо класса, потому что они не будут соответствовать вашей строке json.

Я пробовал кое-что с использованием вашего json, где вы можете получить сумму необходимых вам ключей. может быть, это не лучшее решение, но оно может вам помочь.

var obj = JObject.Parse("{\"computed_at\": \"2019-11-19T10:36:33.908802+00:00\", \"legend_size\": 1, \"data\": {\"series\": [\"2019-11-11\", \"2019-11-12\", \"2019-11-13\"], \"values\": {\"page views\": {\"2019-11-12\": 111, \"2019-11-11\": 573, \"2019-11-13\": 209}}}}");

var options = obj["data"]["values"]["page views"].ToList();

var sum = 0;

foreach (var item in options)
{
   sum += Convert.ToInt32(item.FirstOrDefault());
}

person Vishal modi    schedule 19.11.2019