using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using System.ComponentModel;
using System.Globalization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Collections.Specialized;
using System.Web.Routing;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Runtime.Serialization.Formatters;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using System.Web.SessionState;
public int Id { get; set; }
public string Title { get; set; }
public RootObject(int Id, string Title)
public static void Main()
var url = new Uri(@"https://api.vk.com/api.php?oauth=1&method=database.getUniversities&city_id=314");
using (var client = new WebClient())
jsonString = client.DownloadStringAwareOfEncoding(url);
var universityRepository = JToken.Parse(jsonString)["response"]
.Select(o => o.ToObject<RootObject>())
var listOfUniversities = universityRepository
Console.WriteLine(JsonConvert.SerializeObject(listOfUniversities, Formatting.Indented));
public static class WebUtils
public static Encoding GetEncodingFrom(
NameValueCollection responseHeaders,
Encoding defaultEncoding = null)
if(responseHeaders == null)
throw new ArgumentNullException("responseHeaders");
var contentType = responseHeaders["Content-Type"];
var contentTypeParts = contentType.Split(';');
if(contentTypeParts.Length <= 1)
contentTypeParts.Skip(1).FirstOrDefault(
p => p.TrimStart().StartsWith("charset", StringComparison.InvariantCultureIgnoreCase));
var charsetPartParts = charsetPart.Split('=');
if(charsetPartParts.Length != 2)
var charsetName = charsetPartParts[1].Trim();
return Encoding.GetEncoding(charsetName);
public static class WebClientExtensions
public static string DownloadStringAwareOfEncoding(this WebClient webClient, Uri uri)
var rawData = webClient.DownloadData(uri);
var encoding = WebUtils.GetEncodingFrom(webClient.ResponseHeaders, Encoding.UTF8);
return encoding.GetString(rawData);