Spracovanie JSONu na platforme .NET
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;
}