Json.NET

JSON w dzisiejszych czasach niewątpliwie zasiada na tronie przesyłu danych w środowiskach webowych. To lekki, prosty, czytelny jegomość którego wielokrotnie spotkasz na drodze swojego programistycznego życia. Tematyką dzisiejszego wpisu są serializacja i deserializacja przy użyciu C#

Dla ciekawych odsyłam do definicji wprost z Wikipedii:

In computing, JavaScript Object Notation or JSON is an open-standard file format that uses human-readable text to transmit data objects consisting of attribute–value pairs and array data types (or any other serializable value). It is a very common data format used for asynchronous browser–server communication, including as a replacement for XML in some AJAX-style systems.

Jak wygląda przykładowy JSON?

Całkiem czytelnie, składania jest przejrzysta a dane trzymamy przypisane do odpowiednich kluczy (np. Name” : „Jan”). Liczby możemy podawać wprost – tak jak zrobiono to pod kluczem Age, stringi umieszczamy w cudzysłowie. W powyższym przykładzie przekazano kolekcje dwóch obiektów employees dla których posiadamy dane takie jak: Name, Surname, Age oraz tablicę FavourtieDrinks.

JSON.Net

C#, obsługa JSON’a jest o tyle prosta o ile użyjemy do tego odpowiedniej biblioteki – z czystym sumieniem mogę Ci polecić Json.NET od Newtonsoft. Więcej informacji na ten temat znajdziesz tutaj. Samo dodanie jej do projektu jest banalnie proste – zrobisz to korzystając z NuGet Packages.

Serializacja

To proces w którym konkretny obiekt serializujemy do JSON w formacie string. Na potrzeby powyższego przykładu utwórzmy sobie prosty model będący odwzorowaniem powyższego przykładowego JSONa.

Zainicjalizujmy obiekt klasy Employees

Użycie biblioteki Json.NET i serializacji wygląda następująco

a otrzymanym rezultatem jest nasz zainicjalizowany obiekt employees w formacie JSON (poniżej przedstawiam podgląd w VS):

Deserializacja

W przypadku gdy otrzymamy odpowiedź w formacie JSON i chcemy ją dalej przetworzyć będziemy potrzebowali wykonać operację deserializacji. Aby tego dokonać w pierwszej kolejności należy utworzyć w kodzie strukturę odpowiadającą polom z JSON’a które będą nas interesować (nie musimy deserializować całego JSONa).

Im więcej JSONów będziesz mieć za sobą tym łatwiej będzie Ci to przychodzić, jeśli jednak nie do końca wiesz jak powinno wyglądać odwzorowanie mogę Ci polecić internetowy konwerter za pomocą którego skutecznie i szybko dostaniesz oczekiwanie rezultaty.

https://app.quicktype.io/

Wszystko co musisz zrobić to wkleić tam JSON i wybrać język (w naszym przypadku C#). Automatycznie wygenerowany zbiór klas wyświetli się w głównym oknie. Co ciekawe dla C# konwerter ten używa biblioteki Json.Net.

W naszym przykładzie wykorzystamy utworzone wcześniej klasy.

TIP: Atrybut [JsonProperty(PropertyName =”name”)] jest opcjonalny i daje możliwość deserializować klucze JSON do inaczej nazywających się propert w modelu.

Samą deserializacji wywołujemy intuicyjnie prosto. Posłużmy się tu wcześniej zserializowanym obiektem jsonEmployee i powróćmy tym samym do stanu wyjściowego.

Jak widzisz metoda DeserializeObject<> jest typu generycznego, w nawiasach podajemy typ na jaki ma być zdeserializowany obiekt (w naszym przypadku Employees). W ten sposób dokonaliśmy deserlializacji obiektu JSON na pełnoprawny obiekt zbudowany w opraciu o przygotwany przez nas model.

Podsumowanie

To zaledwie wierzchołek góry lodowej i garść funkcjonalności jakie oferuje nam biblioteka Json.Net. Serdezcnie zachęcam Cię do tworzenia własnych przykładów i zaprzyjeźnienia się z obsługą tego użytecznego formatu. Jak widzisz serializacja jak i deserializacja nie jest wcale taka trudna. A jeśli…

poszukujesz większej ilości ciekawych treści na pewno zainteresują Cię inne wpisy, które umieściłem na blogu. Zapraszam do pozostawienia komentarzy, czekam na Twoją opinię, uwagi i feedback.

Pozdrawiam Cię serdecznie i życzę fantastycznego dnia!
Wojtek