C# 在C中从Mixpanel API获取数据#

C# 在C中从Mixpanel API获取数据#,c#,.net,json,api,mixpanel,C#,.net,Json,Api,Mixpanel,我正在尝试从Mixpanel API获取数据。JSON结果如下所示: {“计算时间”:“2019-11-19T10:36:33.908802+00:00”,“图例大小”:1,“数据”:{“系列”:[“2019-11-11”,“2019-11-12”,“2019-11-13”],“值”:{“页面视图”:{“2019-11-12”:111,“2019-11-11”:573,“2019-11-13”:209}}}} 我想用以下值填充此对象: public class ResultData

我正在尝试从Mixpanel API获取数据。JSON结果如下所示:

{“计算时间”:“2019-11-19T10:36:33.908802+00:00”,“图例大小”:1,“数据”:{“系列”:[“2019-11-11”,“2019-11-12”,“2019-11-13”],“值”:{“页面视图”:{“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 
                }

            }
        }
公共异步任务GetData() { 使用(var client=new HttpClient()) { 尝试 { var formattedDateFrom=DateTime.Today.AddDays(-1).ToString(“yyyy-MM-dd”); var formattedDateTo=DateTime.Now.ToString(“yyyy-MM-dd”); 字符串baseUrl=”https://mixpanel.com/api/2.0/segmentation?from_date=“+formattedDateFrom+”&to_date=“+formattedDateTo+”&event=patient+-+booking+-+booked+约会”; var response=await client.GetAsync(baseUrl); var stringResult=await response.Content.ReadAsStringAsync(); var rawData=JsonConvert.DeserializeObject(stringResult); var mixpanelResult=new ResultData(); mixpanelResult.Value=rawData.Value; mixpanelResult.Title=“页面视图”; 返回wait Task.FromResult(mixpanelResult); }捕获(HttpRequestException HttpRequestException) { //不确定放在这里什么,但稍后会尝试解决 } } } 我知道
rawData.Value
不正确,因为它需要是页面浏览量的总和,但目前它甚至没有反序列化。当我添加断点时,
rawData
只不过是
baseUrl


我在这方面有点新手,任何帮助都将不胜感激。非常感谢

在你的例子中,你的
json
键是动态的,所以我们不能基于任何类对它进行
反序列化,因为它不会匹配你的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());
}