Program xsd.exe – pomoc przy pracy

Program xsd.exe jest dostarczany wraz z pakietem visual studio i możemy go uruchomić poprzez konsolę developerską na przykład (Developer Command Prompt for VS 2017) dostępną z menu start. Program ten jest bardzo przydatny, kiedy musimy wygenerować klasy do serializacji, a dysponujemy schemą xml-a lub też kompletnym plikiem xml. Pozwala nam to zautomatyzować żmudne wpisywanie klas obiektów serializowanych ręcznie jak opisaliśmy w  tym poście. W kolejnych akapitach postaram się powiedzieć jak wykorzystywać xsd.exe przy pracach związanych z serializacją xml-a.

Xml na schemę xsd

Pierwszym przypadkiem użycia będzie wykorzystanie możliwości stworzenia schemy xsd na podstawie pliku xml-owego.  W najprostszej formie możemy wywołać program z katalogu, gdzie mamy nasz plik
xml-owy i jako parametr podać tylko nazwę pliku wejściowego.

Naszym plikiem wejściowym będzie ostatnio wygenerowany plik xml

po wywołaniu polecenia

w tym samym katalogu otrzymamy schemę pliku SerializedObject.xsd

Xsd na klasę

Kolejnym krokiem jest wygenerowanie klas na podstawie schemy. To również jest zadaniem trywialnym. Tym razem oprócz parametru w postaci nazwy pliku xsd  wykorzystujemy przełączniki /c lub /class oraz  /language:languageName. Wspieranymi językami są :

  • C#(CS)  jest wartością domyślną w przypadku generacji klas C# przełącznik można pominąć
  • Visual Basic (VB)
  • JScript (JS)
  • Visual J# (VJS)

Nie są to pełne możliwości programu xsd.exe lecz najczęściej wykorzystywane, osobiście nie miałem okazji wykorzystać innych a i generację schemy wykorzystałem tylko 1 raz. Co innego generacja klas, z której korzystałem wiele razy. Więcej można przeczytać w dokumentacji https://docs.microsoft.com/en-us/dotnet/standard/serialization/xml-schema-definition-tool-xsd-exe

Serializacja i deserializacja XML-a

XML – czym jest?

XML, czyli Extensible Markup Language  jest popularnym sposobem zapisu danych w formie tekstowej. Przez drzewiastą strukturę i słowny zapis wartości oraz nazw właściwości jest łatwy do zrozumienia. Przy pracy z XML mamy kilka możliwości. Możemy go deserializować do postaci obiektów oraz serializować obiekty do xml-a. Możemy także załadować strukturę do pamięci i przetwarzać je z wykorzystaniem DOM API lub z wykorzystaniem nowszego LINQ to XML API. Dzisiaj skupię się na serializacji obiektów z wykorzystaniem wcześniej przygotowanych klas. Czytaj dalej Serializacja i deserializacja XML-a

Snippet VisualStudio

Snippet

Przy pracy z kodem często piszemy te same bloki kodu, linijki, które zawsze wyglądają tak samo. Czy to kolejny using, czy może konstruktor, albo właściwość. Pisanie powtarzających się elementów kodu można z automatyzować wykorzystując snippety, czyli wstawki kodu, których użycie sprowadza się do wpisania skrótu i potwierdzenia dwa razy Tab-em. Visual Studio wspomaga nas jako programistów pewnym zestawem takich fragmentów kodu. Czytaj dalej Snippet VisualStudio

Refleksja – manipulacja obiektami

Refleksja, manipulacja obiektami

W poprzedniej części odczytywaliśmy metadane przy pomocy refleksji. Dzisiaj wykorzystamy te dane, ażeby manipulować obiektami, tworzyć instancje oraz zmieniać ich właściwości, czy też wywoływać ich metody. To właśnie dzięki tym mechanizmom możliwa jest implementacja  kontenerów dependency injection  (wykorzystanie możliwości kreacji obiektów), czy też runnery testów (odczyt atrybutów metod oraz ich wywołanie). Czytaj dalej Refleksja – manipulacja obiektami

Refleksja – odczyt metadanych

Refleksja

Refleksja jest mechanizmem umożliwiającym odczytywanie metadanych. Dzięki niemu możemy odczytać atrybuty i własności obiektów w bibliotekach. Dzięki temu mechanizmowi możemy bez trudu odczytywać własne atrybuty tworzone jak w poprzednim wpisie https://mateuszstanek.pl/2018/02/04/wlasny-atrybut/ Czytaj dalej Refleksja – odczyt metadanych

Własny Atrybut

Własny Atrybut

Z poprzedniego wpisu https://mateuszstanek.pl/2018/02/03/atrybut-c/  wiemy czym są atrybuty. Pora więc napisać jakiś własny. Aby to zrobić wystarczy dodać nową klasę dziedziczącą z klasy System.Attrybute oraz poinformować z jakimi elementami będzie nasz atrybut współpracował.
W tym celu wykorzystamy 3 z predefiniowanych atrybutów AttributeUsage. Czytaj dalej Własny Atrybut