2017-01-26 6 views
1

Im пытается получить события из facebook с несколькими идентификаторами. Я работаю с одним ID, но проблема в том, когда я пытаюсь работать с несколькими идентификаторами. У меня проблема с результатом json, который я получаю. Результат начинается с «данных», и я не могу найти помощь для моей проблемы, когда она начинается с id. Вставка моего Json-результата и кода C# здесь. Thnx.Как перебирать массив json, который выглядит так. Использование графиков C# и Facebook api

Json result { 
    = { { 
     "167730163274461": { 
      "data": [ 
      { 
       "description": "", 
       "end_time": "2017-05-13T23:00:00+0200", 
       "name": "Tjuvjakt (SE) LIVE på Babel", 
       "place": { 
        "name": "Babel Malmö", 
        "location": { 
         "city": "Malmö", 
         "country": "Sweden", 
         "latitude": 55.596131504101, 
         "longitude": 13.010933324378, 
         "street": "Spångatan 38", 
         "zip": "211 53" 
        }, 
        "id": "167730163274461" 
       }, 
       "start_time": "2017-05-13T19:30:00+0200", 
       "id": "1188647557883179" 
      }, 

      "157257114335823": { 
       "data": [ 
       { 
        "description": "", 
        "end_time": "2017-05-21T03:00:00+0200", 
        "name": "Morrissey/The Smiths - Unhappy Birthday Party", 
        "place": { 
         "name": "Moriska Paviljongen", 
         "location": { 
          "city": "Malmö", 
          "country": "Sweden", 
          "latitude": 55.593787653743, 
          "longitude": 13.013644627863, 
          "street": "Norra Parkgatan 2", 
          "zip": "21422" 
         }, 
         "id": "157257114335823" 
        }, 
        "start_time": "2017-05-20T23:00:00+0200", 
        "id": "1208509892563996" 
       }, 
      } 

      List<FbEvents> listOfEvents; 
      public ActionResult Index() 
      { 
       WebClient myWebClient = new WebClient(); 

       string downloadUrl = "https://graph.facebook.com/events?ids=167730163274461,157257114335823&access_token=**=40"; 

       Uri downloadUri = new Uri(downloadUrl, UriKind.Absolute); 
       string downloadedJsonResult = null; 

       try 
       { 
        downloadedJsonResult = myWebClient.DownloadString(downloadUri); 

       } 

       catch (Exception ex) 
       { 
        ViewBag.ErrorMessage = ex.ToString(); 
        return View("Error"); 
       } 

       JObject jsoncreatestring = JObject.Parse(downloadedJsonResult); 

       JArray requiredDataArray = (JArray)jsoncreatestring["167730163274461"]["data"]; 
       string stringToBe = requiredDataArray.ToString(); 
       listOfEvents = JsonConvert.DeserializeObject<List<FbEvents>>(stringToBe); 

       return View(listOfEvents); 
      } 
     } 
    } 

    public class FbEvents 
    { 
     [JsonProperty("owner")] 
     public string owner { get; set; } 

     [JsonProperty("name")] 
     public string name { get; set; } 

     [JsonProperty("start_time")] 
     public string date { get; set; } 

     [JsonProperty("description")] 
     public string description { get; set; } 

     [JsonProperty("cover")] 
     public Dictionary<string, string> cover { get; set; } 

     [JsonProperty("id")] 
     public string id { get; set; } 
    } 
+0

Ваш JSON не хорошо отформатирован. Где закрывается '' 'вашего массива' data'? – krlzlx

+0

Я просто вставил два разных «ключа». Между ними больше данных. Мой json хорош, вопрос в том, как перебирать json, когда у меня есть ключ. И я не могу получить доступ к «данным» сразу. –

+0

Подобный вопрос - [http://stackoverflow.com/questions/41112824/c-sharp-deserialize-facebook-json-starting-with-random-key](http://stackoverflow.com/questions/41112824/c- sharp-deserialize-facebook-json-start-with-random-key) – mungurs

ответ

0

Я не думаю, что это лучший способ сделать это, но он должен работать так:

// [...] 

JObject jsoncreatestring = JObject.Parse(downloadedJsonResult); 

List<FbEvents> listOfEvents = new List<FbEvents>(); 

foreach (var item in jsoncreatestring) 
{ 
    JArray requiredDataArray = (JArray)item.Value["data"]; 
    FbEvents fbEvent = JsonConvert.DeserializeObject<List<FbEvents>>(requiredDataArray.ToString())[0]; 

    listOfEvents.Add(fbEvent); 
} 

return View(listOfEvents); 

// [...] 
+0

Thnx alot. Не сейчас, если это лучший способ, но его работы :). –

+0

Добро пожаловать. Всегда рад помочь. – krlzlx