C# – Jak wygodnie serializować i deserializować obiekty.

Loading Likes...

Serializacja jest bardzo rozległym zagadnieniem, dowodem na to może być chociażby osobny rozdział w książkach technicznych. Jest wiele istotnych kwestii związanych z tym tematem, natomiast ja tym wpisem chciałbym Ci pokazać najwygodniejszy sposób. Jeżeli chciałbyś dowiedzieć się jeszcze więcej na temat serializacji, gorąco polecam Ci książkę: C# w pigułce.

Wielokrotnie w swoich projektach spotykamy się z potrzebą serializacji lub deserializacji obiektów. Najczęściej w celu transmisji obiektów, przez sieć lub poza aplikację, lub też po prostu przechowując dane w pliku. Na swoim przykładzie wiem, że raczej ten pierwszy wariant pojawia się częściej, więc skupimy się na transmisji danych (API).

Zakładam, że koncepcja serializacji jest Ci chociaż trochę znana. Dla przypomnienia, w skrócie chodzi o to, by na podstawie obiektu utworzyć strumień danych reprezentujący ten obiekt (strumień ten może mieć postać JSON lub XML) i odwrotne działanie – deserializacja, czyli utworzenie obiektu, na podstawie strumienia. Tyle słowem wstępu, czas na konkrety.

Naszym zadaniem będzie deserializacja odpowiedzi, którą otrzymamy od serwera, tak aby ułatwić sobie późniejszą pracę. Tak jak wspomniałem wykorzystamy API, nie jest istotne jakie, najważniejsza jest koncepcja działania i poszczególne kroki – dlatego na tym skup swoją uwagę.

Pozwolę sobie pominąć proces wysyłania żądania do serwera.

Krok 1. Wszystkie dokumentacje API udostępniają przykładowe odpowiedzi serwera. Przykładowa odpowiedź z pierwszego lepszego API wygląda następująco.

Krok 2. Utwórz klasę np. AccountResponse.cs i uśuń z niej zawartość – zostaw biblioteki i namespace.

Krok 3. Skopiuj całą odpowiedź z serwera. Przejdź do Visual Studio. Ustaw kursor pomiędzy nawiasami klamrowymi w pliku powyżej. Następnie wybierz z menu Edit -> Paste special, i wybierz w naszym przypadku Paste JSON As Classes. Twoim oczom ukaże się reprezentacja odpowiedzi serwera w postaci obiektu klasy. Oczywiście to nie koniec.

Tej opcji nie ma jeszcze w Visual Studio Code (08.11.18r.)

.NET Framework

Krok 4. Zmień nazwę głównej klasy z Rootobject na AccountResponse. Będziemy teraz potrzebować klasy JavaScriptSerializer, aby móc z niej korzystać potrzebna jest odpowiednia referencja. W VS, dodaj referencję System.Web.Extensions do projektu. Możesz to zrobić poprzez kliknięcie prawym na References a następnie Add Reference. Wyszukaj i dodaj. Jak wszystko wykonasz poprawnie zaimportuj do pliku w którym będziesz używał tą klasę poniższą bibliotekę.

Krok 5. Mamy wszystko co potrzebujemy. Teraz zostało nam tylko dopełnienie formalności. Użyjmy zatem naszej nowej klasy.

UPDATE 08.11.18

ASP.NET Core

W ASP.NET Core taki sam efekt można uzyskać wykorzystując bibliotekę Newtonsoft.Json z pakietu Microsoft.AspNetCore.All

Wystarczy dodać do projektu pakiet poprzez komendę:

lub

a następnie w podobny sposób wywołać funkcję DeserializeObject()

Konsola:

Mam nadzieję, że komuś przyda się ta wiedza we własnych projektach, oczywiście ten mechanizm można zastosować również w odwrotną stronę – serializacji. Generalnie sposobów na serializowanie jest wiele, natomiast według mnie ten jest najprostszy.

You May Also Like

About the Author: Jerzy Kołakowski

Pasjonat informatyki, bloger. Full-stack Developer Technologie:
  • ASP.NET MVC
  • ASP.NET CORE
  • Angular 2+

1 Comment

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Facebook