Задать вопрос

Язык c#, json.net и парсинг api vk.com?

Дело тут такое, я пытаюсь распарсить стену социальной сети вконтакте.

У меня получается, но не до конца. Я смог получить 1 сообщение, но как в цикле все это вывести я теряюсь. К тому же хочется вариант элегантный и не затратный по ресурсам. В c# я новичок, зеленый до ужаса. Моя первая программа.


Серверное api отвечает мне во таким ответом.

{
    "response": [
        5,
        {
            "id": 235,
            "from_id": 00000,
            "to_id": 00000,
            "date": 1365266153,
            "text": "Наконец-то открыл стенку!))",
            "comments": {
                "count": 0
            },
            "likes": {
                "count": 0
            },
            "reposts": {
                "count": 0
            }
        },
        {
            "id": 234,
            "from_id": 00000,
            "to_id": 000000,
            "date": 1365264936,
            "text": "тест 4",
            "comments": {
                "count": 0
            },
            "likes": {
                "count": 0
            },
            "reposts": {
                "count": 0
            }
        },
        {
            "id": 233,
            "from_id": 0000000,
            "to_id": 0000000,
            "date": 1365264931,
            "text": "тест 3",
            "comments": {
                "count": 0
            },
            "likes": {
                "count": 0
            },
            "reposts": {
                "count": 0
            }
        },
        {
            "id": 232,
            "from_id": 000000,
            "to_id": 000000,
            "date": 1365264926,
            "text": "тест 2",
            "comments": {
                "count": 0
            },
            "likes": {
                "count": 0
            },
            "reposts": {
                "count": 0
            }
        },
        {
            "id": 231,
            "from_id": 000000,
            "to_id": 000000,
            "date": 1365264922,
            "text": "тест 1",
            "comments": {
                "count": 0
            },
            "likes": {
                "count": 0
            },
            "reposts": {
                "count": 0
            }
        }
    ]
}



Тут массив response у которого элемент 0 содержит количество сообщений, а все остальные элементы это соответственно сами сообщения.

JObject test = JObject.Parse(responseFromVk);


Так я могу добраться до сообщения:

(string)test["response"][1].ToString();


Затем могу его распарсить в c# объект:

vkClientMetro1.Wall getUser = JsonConvert.DeserializeObject<vkClientMetro1.Wall >((string)test["response"][1].ToString());
 
 
 
public class Wall 
    {
        public int id { get; set; }
        public int from_id { get; set; }
        public int to_id { get; set; }
        public int date { get; set; }
        public string text { get; set; }
        public Comments comments { get; set; }
        public Likes likes { get; set; }
        public Reposts reposts { get; set; }
    }



ну и получить getUser.text но как я и говорил в начале только одно, как все подцепить и сделать это красиво?
  • Вопрос задан
  • 17310 просмотров
Подписаться 7 Оценить Комментировать
Решения вопроса 1
@p4p Автор вопроса
ясных примеров для json я не нашел и вместо решил использовать xml.

using (StringReader s = new StringReader(responseFromVk))
                {

                    XDocument loadedData = XDocument.Load(s);

                    var data = from query in loadedData.Descendants("post")
                               select new vkClientMetro1.Wall
                               {
                                   Id = (int)query.Element("id"),
                                   From_id = (int)query.Element("from_id"),
                                   To_id = (int)query.Element("to_id"),
                                   Date = (int)query.Element("date"),
                                   Text = (string)query.Element("text"),
                               };
                    listBox.ItemsSource = data;
                }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
alexpp
@alexpp
А может не стоит изобретать свой велосипед, а стоит взять готовый? — vk.codeplex.com/
Ответ написан
FanKiLL
@FanKiLL
А так пробовали? Потом в форе что хотите с этими сообщениями делайте.
List<Wall> messagesOnWall = JsonConvert.DeserializeObject<List<Wall>>(test["response"]);
Ответ написан
@deleted-Brazier
Как альтернативный вариант можете использовать для проекта WinRT JavaScript вместо C#. Код выйдет наиболее лаконичным:

var test = JSON.parse(responseFromVk);
var wall = test.response[1];
Ответ написан
@erick_voodoo
var temp = JsonConvert.DeserializeObject((string)test["response"][1].ToString()) as vkClientMetro1.Wall;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы