Igor Kulman

Spracovanie JSONu na platforme .NET

· Igor Kulman

JSON je veľmi populárny formát na výmenu dát, hlavne vo svete webových technológií a JavaScriptu. Platforma .NET obsahuje natívnu podporu tohto formátu, lepšou alternatívou však často býva open-source knižnica Json.NET

Json.NET

Json.NET je flexibilný JSON serializér pre .NET s podporou LINQ. Asi najväčším prínosom jeho použitia je jeho vysoký výkon, hlavne voči vstavanému DataContractJsonSerializer. Samozrejmosťou je inštalácia vo forme Nuget balíčka.

Použitie je vďaka podpore LINQ veľmi jednoduché. Najprv je potrebné vytvoriť Jobject

JObject o = JObject.Parse(jsonString);

z ktorého môžeme vytvoriť napríklad kolekciu objektov typu TicketViewModel

Tickets = new ObservableCollection<TicketViewModel>((o["tickets"].Select(ticket => new TicketViewModel(ticket)).OrderBy(l => l.City).ToList()));

tak, že jednotlivé položky objektu naplníme z typu JToken

public TicketViewModel(Newtonsoft.Json.Linq.JToken ticket) 
{ _city = (string)ticket.SelectToken("city"); 
    _cityCes = (string)ticket.SelectToken("city_ces");      
_currency = (string)ticket.SelectToken("currency");  
    .... 
}

DataContractJsonSerializer

Ak Json.NET nechcete alebo nemôžete použiť (napríklad kvôli problémom aktuálnej verzie s WinRT), .NET obsahuje DataContractJsonSerializer. Pri jeho použití je potrebné najprv vytvoriť objekt s presne rovnakou štruktúrou ako je daný JSON. Nemusíte ho samozrejme vytvárať ručne, môžete použiť napríklad utilitu json2csharp.

Použitie DataContractJsonSerializer je trochu menej čitateľné, ako v prípade Json.NET

var serializer = new DataContractJsonSerializer(typeof(Tickets)); 
Tickets tickets; 
using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(responseText))) 
{ 
  root = serializer.ReadObject(stream) as Tickets; 
}