Konwerter C# na XML
Wklej klasy lub obiekty C#. Dostań w zamian czysty XML.
Co robi to narzędzie
Jeśli kiedykolwiek musiałeś ręcznie sklecić payload XML odzwierciedlający klasę C# — do wywołania SOAP, pliku konfiguracyjnego, kontraktu WCF albo fixture testowego — wiesz, ile w tym boilerplate'u. Wklej C# tutaj i dostaniesz poprawnie zbudowany XML za jednym razem. Pojedynczy object initializer, cały plik modelu z kilkoma klasami albo coś głęboko zagnieżdżonego — efekt ten sam: kompletny dokument XML z każdą property na swoim miejscu.
To nie jest głupie podmienianie stringów. Konwerter wie, jak C# faktycznie serializuje do XML-a: przyrostki decimal typu 49.99m tracą m, DateTime i DateTimeOffset wychodzą jako stringi ISO-8601, Guid dostaje standardowy format heksowy 8-4-4-4-12, nullable z wartością null stają się pustymi elementami, a kolekcje trzymają ten sam kształt, jaki wyprodukowałby XmlSerializer — każda List<T> staje się elementem-kontenerem z jednym dzieckiem na item, nazwanym po typie elementu.
Atrybuty serializacji też są respektowane. [XmlRoot("x")] zmienia nazwę elementu głównego, [XmlElement("x")] zmienia nazwę dziecka, [XmlAttribute("x")] emituje właściwość jako atrybut zamiast elementu, a [XmlIgnore] ją wyrzuca. [DataMember(Name="x")] na klasach DataContract działa tak samo. Jeśli wkleisz kilka klas, każda trafia do wyniku z rozwiniętymi typami zagnieżdżonymi i właściwościami dziedziczonymi. Nic nie ginie po cichu.
Jak tego używać
Trzy kroki. Działa tak samo, czy wklejasz pięć linii, czy cały plik modelu.
Wklej swój C# (albo wypróbuj przykład)
Wrzuć swój C# do lewego edytora bez żadnych poprawek. Object initializer, pełna definicja klasy, wiele klas czy typy zagnieżdżone — wszystko gra. Kliknij Wczytaj przykład, jeśli chcesz najpierw zobaczyć realny przykład.
Nie musisz wycinać komentarzy, usuwać atrybutów ani czyścić składni C#. Zostaw kod tak, jak wygląda w IDE. Po prostu wklej.
Kliknij Konwertuj
Wciśnij zielony przycisk Konwertuj. Narzędzie czyta C#, zachowuje każdą klasę i właściwość i buduje XML za jednym razem. Zobaczysz krótki wskaźnik ładowania podczas konwersji.
Skopiuj XML
Prawy panel wypełni się ładnie wciętym, dobrze zbudowanym XML-em, który przyjmie każdy zgodny ze standardem parser XML. Skopiuj go prosto do requestu SOAP, pliku konfiguracyjnego, fixture testowego albo dokumentacji.
Kiedy to się realnie przydaje
Budowanie fixture'ów SOAP / WCF
Masz kontrakt requestu w C# i potrzebujesz body XML, żeby wrzucić go do SoapUI albo Postmana. Wklej klasę, weź XML, lecisz dalej.
Szkielet plików konfiguracyjnych
Klasa Settings z 40 właściwościami zamienia się w gotowy do edycji szablon XML dla app.config, web.config albo dowolnego configu opartego na XML — zero ręcznego klepania.
Trzymanie dokumentacji w zgodzie z kodem
Generuj przykłady XML do README, referencji API albo dokumentacji schematu opartego na XSD prosto z realnych modeli, żeby dokumentacja odpowiadała kodowi.
Dane seedujące do testów
Zamień object initializery z testów jednostkowych na pliki seed XML dla testów integracyjnych, mock serwerów albo legacy-systemów, które nadal mówią XML-em.
Częste pytania
Czy mogę wkleić kilka klas naraz?
Tak — wklej cały plik. Każda klasa najwyższego poziomu wychodzi z rozwiniętymi typami zagnieżdżonymi i właściwościami dziedziczonymi z klas bazowych. Nic nie jest pomijane.
Czy respektuje atrybuty typu [XmlElement], [XmlAttribute] i [XmlIgnore]?
Tak. [XmlRoot("x")] zmienia nazwę elementu głównego, [XmlElement("x")] dziecka, [XmlAttribute("x")] emituje właściwość jako atrybut rodzica, a [XmlIgnore] wyrzuca ją całkowicie. [DataMember(Name="x")] na klasach DataContract też zmienia nazwę elementu. To dokładnie to samo, co zrobiłby XmlSerializer.
Jak traktuje decimal, DateTime, Guid i nullable?
Decimale (49.99m) tracą przyrostek i stają się zwykłym tekstem liczbowym. DateTime i DateTimeOffset wychodzą jako stringi ISO-8601. Guid to standardowy heks 8-4-4-4-12. TimeSpan staje się czasem trwania ISO-8601 albo HH:mm:ss. Nullable z wartością null stają się pustymi elementami zamiast być pomijane — dzięki temu struktura pozostaje spójna.
A zagnieżdżone klasy, listy i słowniki?
List<T>, tablice, HashSet<T> i IEnumerable<T> stają się elementami-kontenerami z jednym dzieckiem na item, nazwanym po typie elementu — List<OrderItem> Items zamienia się w <Items><OrderItem/><OrderItem/></Items>. Dictionary<K,V> staje się kontenerem <Entry><Key/><Value/></Entry>. Zagnieżdżone object initializery są rozwijane jako zagnieżdżone elementy z każdym polem nietkniętym.
Czy mój kod gdzieś jest zapisywany?
Twój kod leci do backendu, żeby go skonwertować, i nie jest nigdzie utrwalany — nie logujemy payloadu. Jak zwykle z narzędziami online: jeśli kod jest naprawdę wrażliwy, przejrzyj go wcześniej.
A co, jeśli w C# jest coś nietypowego — metody, delegaty, IntPtr?
Takie rzeczy wychodzą jako puste elementy zamiast wywalać całą konwersję, więc reszta modelu i tak przejdzie. Jeśli sam kod ma błędy składniowe, popraw te oczywiste — parser jest wyrozumiały, ale nie wróżka.
Inne narzędzia, które mogą ci się przydać
C# do XML to jeden kawałek układanki. Oto narzędzia, które dobrze z nim grają: