Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Как десериализовать JSON и вывести в ListBox url картинок

#c_sharp #json


Доброго всем дня! Я новичок и прошу вашей помощи господа специалисты и не очень.

Перегоняю я коллекцию в JSON 

ReadOnlyCollection wall = api.Wall.Get(-group.Id.Value, out totalCount, count);
string json = JsonConvert.SerializeObject(wall, Formatting.Indented);


Затем смотрю,что я получаю в строку json, получается вот это -

 [
  {
    "Id": 144159,
    "OwnerId": -30022666,
    "FromId": -30022666,
    "Date": "2015-06-11T21:01:45+03:00",
    "Text": "Если вы не можете отказать себе в чем-либо, например, в мороженом, то
мороженое управляет вами. Если вы ограничиваете себя в мороженом – то оно имеет над
вами двойной контроль. Поскольку теперь к дискомфорту по поводу его отсутствия примешивается
ненависть к себе и чувство вины в случае, если вы не смогли удержаться. Если же вы
полностью отрицаете мороженое – то оно властвует над вами, ведь ему удалось отрезать
кусочек вашей реальности.\n\nТак же с остальными желаниями: алкоголь, секс, сигареты,
деньги, адреналин. Бросить курить сложно не вследствие химической зависимости, а потому
что бросающий зависит от сигарет куда больше курящего. Борющийся за демократию оппозиционер
никогда не станет свободным гражданином – он раб борьбы. Монах-аскет никогда не победит
\"страсть плоти\" – он останется рабом отрицания. Принятие и отторжение – всего лишь
метаморфозы зависимости.\n\nМудрость заключается не в самоограничении, не в тотальной
аскезе, а в балансе. Вы становитесь свободными от своих желаний тогда, когда сохраняете
внутренний комфорт, вне зависимости о того, получаете ли вы желаемое или нет. Прелесть
такой свободы в том, что вы – неуязвимы. Вы счастливы или ... счастливы.",
    "ReplyOwnerId": null,
    "ReplyPostId": null,
    "FriendsOnly": false,
    "Comments": {
      "Count": 0,
      "CanPost": false
    },
    "Likes": {
      "Count": 10792,
      "UserLikes": false,
      "CanLike": true,
      "CanPublish": true
    },
    "Reposts": {
      "Count": 2312,
      "UserReposted": false
    },
    "PostType": "post",
    "PostSource": {
      "Type": "api",
      "Data": null
    },
    "Attachments": [
      {
        "Instance": {
          "Latitude": null,
          "Longitude": null,
          "AlbumId": -7,
          "Photo75": "http://cs629506.vk.me/v629506780/3a56/Sn3eI5qEtc0.jpg",
          "Photo130": "http://cs629506.vk.me/v629506780/3a57/tKRNTJlSH1s.jpg",
          "Photo604": "http://cs629506.vk.me/v629506780/3a58/wyz6H7Py_8U.jpg",
          "Photo807": null,
          "Photo1280": null,
          "Photo2560": null,
          "Width": 468,
          "Height": 366,
          "Text": "",
          "CreateTime": "2015-06-11T21:01:46+03:00",
          "AccessKey": "f91344779bdfeddf86",
          "UserId": 100,
          "PostId": 144159,
          "PlacerId": null,
          "TagCreated": null,
          "TagId": null,
          "Likes": null,
          "CanComment": null,
          "Comments": null,
          "Tags": null,
          "PhotoSrc": null,
          "PhotoHash": null,
          "Id": 368776971,
          "OwnerId": -30022666
        },
        "Type": "VkNet.Model.Attachments.Photo, VkNet, Version=1.0.16.0, Culture=neutral,
PublicKeyToken=null"
      }
    ],
    "Attachment": {
      "Instance": {
        "Latitude": null,
        "Longitude": null,
        "AlbumId": -7,
        "Photo75": "http://cs629506.vk.me/v629506780/3a56/Sn3eI5qEtc0.jpg",
        "Photo130": "http://cs629506.vk.me/v629506780/3a57/tKRNTJlSH1s.jpg",
        "Photo604": "http://cs629506.vk.me/v629506780/3a58/wyz6H7Py_8U.jpg",
        "Photo807": null,
        "Photo1280": null,
        "Photo2560": null,
        "Width": 468,
        "Height": 366,
        "Text": "",
        "CreateTime": "2015-06-11T21:01:46+03:00",
        "AccessKey": "f91344779bdfeddf86",
        "UserId": 100,
        "PostId": 144159,
        "PlacerId": null,
        "TagCreated": null,
        "TagId": null,
        "Likes": null,
        "CanComment": null,
        "Comments": null,
        "Tags": null,
        "PhotoSrc": null,
        "PhotoHash": null,
        "Id": 368776971,
        "OwnerId": -30022666
      },
      "Type": "VkNet.Model.Attachments.Photo, VkNet, Version=1.0.16.0, Culture=neutral,
PublicKeyToken=null"
    },
    "Geo": null,
    "SignerId": null,
    "CopyPostDate": null,
    "CopyPostType": null,
    "CopyOwnerId": null,
    "CopyPostId": null,
    "CopyText": null,
    "CopyHistory": [],
    "CopyCommenterId": null,
    "CopyCommentId": null,
    "CanDelete": false,
    "CanEdit": false
  }
]


Вопрос как мне достать Url "Photo604": "http://cs629506.vk.me/v629506780/3a58/wyz6H7Py_8U.jpg",
И отобразить в listbox? Спасибо!
    


Ответы

Ответ 1



Для того, чтобы распарсить JSON, можете воспользоваться либо Json.NET, либо System.Web.Helpers.Json (нужна четвёртая версия .NET) На примере Json.NET, код для получения url из Photo604 будет таким: dynamic records = JArray.Parse(json); string url = records[0].Attachments[0].Instance.Photo604; А получить все url для полей, названия которых начинаются на "Photo", можно, например, так: dynamic records = JArray.Parse(json); dynamic instance = records[0].Attachments[0].Instance; foreach (var field in instance) { if (field.Name.StartsWith("Photo") && field.Value != null) { listBox.Items.Add(field.Value.ToString()); } } Способов, на самом деле много и это только один из них. В документации есть примеры с dynamic, LINQ, SelectToken и др.

Комментариев нет:

Отправить комментарий