ASP.NET Json - доступ к данным вопрос - PullRequest
0 голосов
/ 21 декабря 2010

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

Хорошо, вот моя проблема. Я пытаюсь написать приложение для Facebook (сейчас просто пытаюсь =)). И мне нужна небольшая помощь с JSON.

Так что это часть моего HomeController.cs, ничего особенного на самом деле.

dynamic me2 = app2.Api("/me/feed");
ViewData["data"] = me2.data;

Вот мой profile.aspx. Он отлично работает и записывает все посты на моей стене в фейсбуке.

<% foreach (JsonObject item2 in (ViewData["data"] as Facebook.JsonArray))
      { %>
        <li>
            <%=item2["message"] %>
        </li>
    <%} %>

Хорошо, теперь пришло время для проблемы.

"data": [
      {
         "id": "100001721189066_164115910298999",
         "from": {
            "name": "Poiskus Nulaena",
            "id": "100001721189066"
         },
         "message": "bleble",
         "actions": [
            {
               "name": "Comment",
               "link": "http://www.facebook.com/100001721189066/posts/164115910298999"
            },

Так что из-за ViewData ["data"] = me2.data; в файле .cs файл .aspx возвращает сообщение (в этом примере - bleble). Но как я могу получить доступ к элементу «ссылка» или «имя» в массиве «действия». Я попробовал:

-ViewData ["actions"] = me2.actions; -> не работает

-ViewData ["actions"] = me2.data.actions; -> тоже не работает

-переданный foreach не работает в моем случае

Любая помощь будет полезна: P

Спасибо

Себастьян

1 Ответ

2 голосов
/ 21 декабря 2010

Данные - это массив JSON, а не объект. Вы ищете действия над первым элементом или коллекцию всех элементов? Я не уверен, насколько хорошо это работает с динамическими объектами, но это должно дать вам правильное представление:

var actions = m2.data.Select(d => d["actions"]);
var actionsFromFirstItem = actions.First();

Редактировать

Я не знаком с API Facebook, который вы используете, но я буду использовать JSON .NET в качестве примера. Этот код:

var allActions = from d in jsonObject["data"]
                from a in d["actions"]
                select new {name = a.Value<string>("name"), link = a.Value<string>("link")};

... даст вам коллекцию анонимных объектов, представляющих все действия всех сообщений в массиве, но они не будут привязаны к какому-либо конкретному сообщению. Вы можете видеть, как я воспринимаю jsonObject ["data"] как коллекцию, а список "action" каждого из этих элементов - как другую коллекцию.

Поскольку вы на самом деле не определили, как вы хотите, чтобы результаты выглядели, это примерно столько, сколько я могу вам помочь. Я не очень разбираюсь в API Facebook, но, похоже, вам лучше использовать строго типизированный var и обращаться к его членам по строке, а не с помощью динамического объекта. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...