internal static Relative FromJson(VkResponse response) { var relative = new Relative(); // Согласно документации VK API, должно возвращаться поле id, однако фактически может возвращаться uid (для старых версий API). // Можно будет парсить только id после перевода всех методов на более новые версии (как минимум Users.Search). if (response.ContainsKey("id")) relative.Id = response["id"]; else if (response.ContainsKey("uid")) relative.Id = response["uid"]; relative.Type = response["type"]; relative.Name = response["name"]; return relative; }
// -------------------------------------------------------------------------------------------- /// <summary> /// В специальную коллекцию данных vk с общим количеством. /// </summary> /// <typeparam name="T">Тип данных</typeparam> /// <param name="response">Ответ vk.com.</param> /// <param name="selector">Функция выборки.</param> /// <returns>Специальная коллекция данных vk с общим количеством.</returns> public static VkCollection <T> ToVkCollectionOf <T>(this VkResponse response, Func <VkResponse, T> selector) { if (response == null) { return(new VkCollection <T>(0, Enumerable.Empty <T>())); } VkResponseArray data = response.ContainsKey("items") ? response["items"] : response; var resultCollection = data.ToCollectionOf(selector); var totalCount = response.ContainsKey("count") ? response["count"] : (ulong)resultCollection.Count; return(new VkCollection <T>(totalCount, resultCollection)); }
// -------------------------------------------------------------------------------------------- /// <summary> /// В специальную коллекцию данных vk с общим количеством. /// </summary> /// <typeparam name="T"> Тип данных </typeparam> /// <param name="response"> Ответ vk.com. </param> /// <param name="selector"> Функция выборки. </param> /// <param name="arrayName"> Наименование поля массива </param> /// <returns> Специальная коллекция данных vk с общим количеством. </returns> public static VkCollection <T> ToVkCollectionOf <T>(this VkResponse response , Func <VkResponse, T> selector , string arrayName = "items") { if (response == null) { return(new VkCollection <T>(totalCount: 0, list: Enumerable.Empty <T>())); } VkResponseArray data = response.ContainsKey(key: arrayName) ? response[key : arrayName] : response; var resultCollection = data.ToReadOnlyCollectionOf(selector: selector); var totalCount = response.ContainsKey(key: "count") ? response[key : "count"] : (ulong)resultCollection.Count; return(new VkCollection <T>(totalCount: totalCount, list: resultCollection)); }
/// <summary> /// Разобрать из json. /// </summary> /// <param name="response">Ответ сервера.</param> /// <returns></returns> public static AppGetObject FromJson(VkResponse response) { AppGetObject appGetObject; if (response.ContainsKey("items")) { appGetObject = new AppGetObject { TotalCount = response["count"], Apps = response["items"].ToVkCollectionOf<App>(r => r), Friends = response["profiles"].ToVkCollectionOf<User>(r => r) }; } else { appGetObject = new AppGetObject { TotalCount = response["count"], Apps = response["items"].ToVkCollectionOf<App>(r => r) }; } return appGetObject; }
/// <summary> /// Разобрать из json. /// </summary> /// <param name="response">Ответ сервера.</param> /// <returns></returns> /// <exception cref="System.Exception">"Типа '{0}' не существует. Пожалуйста заведите задачу на сайте проекта: https://github.com/vknet/vk/issues"</exception> internal static UserOrGroup FromJson(VkResponse response) { var userOrGroup = new UserOrGroup { Users = new List<User>(), Groups = new List<Group>() }; if (response.ContainsKey("count")) { userOrGroup.TotalCount = response["count"]; } VkResponseArray result = response; foreach (var item in result) { switch (item["type"].ToString()) { case "group": { Group @group = item; userOrGroup.Groups.Add(@group); } break; case "profile": { User user = item; userOrGroup.Users.Add(user); } break; default: { throw new System.Exception(string.Format("Типа '{0}' не существует. Пожалуйста заведите задачу на сайте проекта: https://github.com/vknet/vk/issues", item["type"])); } } } return userOrGroup; }
/// <summary> /// Разобрать из json. /// </summary> /// <param name="response">Ответ сервера.</param> /// <returns></returns> internal static WallGetObject FromJson(VkResponse response) { WallGetObject wallGetObject; if (response.ContainsKey("items")) { wallGetObject = new WallGetObject { TotalCount = response["count"], WallPosts = response["items"].ToReadOnlyCollectionOf<Post>(r => r), Profiles = response["profiles"].ToReadOnlyCollectionOf<User>(r => r), Groups = response["groups"].ToReadOnlyCollectionOf<Group>(r => r) }; } else { wallGetObject = new WallGetObject { WallPosts = response.ToReadOnlyCollectionOf<Post>(r => r) }; } return wallGetObject; }
internal static Group FromJson(VkResponse response) { var group = new Group(); group.Id = response["id"] ?? response["gid"]; group.Name = response["name"]; group.ScreenName = response["screen_name"]; group.IsClosed = response["is_closed"]; group.IsAdmin = response["is_admin"]; group.AdminLevel = response["admin_level"]; group.IsMember = response["is_member"]; group.Type = response["type"]; group.PhotoPreviews = response; // опциональные поля group.CityId = response.ContainsKey("city") ? response["city"]["id"] : null; group.CountryId = response.ContainsKey("country") ? response["country"]["id"] : null; group.Place = response["place"]; group.Description = response["description"]; group.WikiPage = response["wiki_page"]; group.MembersCount = response["members_count"]; group.Counters = response["counters"]; group.StartDate = response["start_date"]; group.EndDate = response["finish_date"] ?? response["end_date"]; group.CanPost = response["can_post"]; group.CanSeelAllPosts = response["can_see_all_posts"]; group.CanUploadDocuments = response["can_upload_doc"]; group.CanCreateTopic = response["can_create_topic"]; group.Activity = response["activity"]; group.Status = response["status"]; group.Contacts = response["contacts"]; group.Links = response["links"]; group.FixedPostId = response["fixed_post"]; group.IsVerified = response["verified"]; group.Site = response["site"]; group.InvitedBy = response["invited_by"]; return group; }
internal static PhotoAlbum FromJson(VkResponse response) { var album = new PhotoAlbum(); if (response.ContainsKey("aid")) album.Id = response["aid"]; else album.Id = response["id"]; album.ThumbId = Utilities.GetNullableLongId(response["thumb_id"]); album.OwnerId = Utilities.GetNullableLongId(response["owner_id"]); album.Title = response["title"]; album.Description = response["description"]; album.Created = response["created"]; album.Updated = response["updated"]; album.Size = response["size"]; album.Privacy = Utilities.GetNullableLongId(response["privacy"]); album.CommentPrivacy = Utilities.GetNullableLongId(response["comment_privacy"]); album.CanUpload = response["can_upload"]; album.PrivacyView = response["privacy_view"]; album.ThumbSrc = response["thumb_src"]; return album; }
/// <summary> /// Разобрать из json. /// </summary> /// <param name="response">Ответ сервера.</param> /// <returns></returns> public static PushSettings FromJson(VkResponse response) { var result = new PushSettings { Msg = response["msg"], Chat = response["chat"], Friend = response.ContainsKey("friend") && response["mutual"], FriendFound = response["friend_found"], FriendAccepted = response["friend_accepted"], Reply = response["reply"], Comment = response.ContainsKey("comment") && response["fr_of_fr"], Mention = response.ContainsKey("mention") && response["fr_of_fr"], Like = response.ContainsKey("like") && response["fr_of_fr"], Repost = response.ContainsKey("repost") && response["fr_of_fr"], WallPost = response["wall_post"], WallPublish = response["wall_publish"], GroupInvite = response["group_invite"], GroupAccepted = response["group_accepted"], EventSoon = response["event_soon"], TagPhoto = response.ContainsKey("tag_photo") && response["fr_of_fr"], AppRequest = response["app_request"], SdkOpen = response["sdk_open"], NewPost = response["new_post"], Birthday = response["birthday"] }; return result; }