Indsæt F# til venstre og klik på "Konverter" — vi laver det om til XMLIndsæt F#-kode

Hvad værktøjet gør

Hvis du skriver F# og arbejder tæt på .NET XML-config, WCF-contracts eller et SOAP-endpoint, kender du allerede smerten: dine record-typer er rene og udtryksfulde, men at skrive den tilsvarende XML i hånden er en plage. Indsæt F# her, og du får velformet XML tilbage i ét hug — en enkelt record, en udfyldt let-binding, eller et helt modul med indlejrede records.

Konverteren kender de F#-særheder, du faktisk bekymrer dig om. En option<string> med Some "x" bliver et normalt element; None bliver til et tomt element i stedet for at forsvinde, så formen på din XML forbliver forudsigelig. decimal-literaler (249.99m) taber deres suffix. list, seq og arrays bliver til container-elementer med ét barn pr. item — svarende til det System.Xml.Serialization sender ud under motorhjelmen, når du round-tripper via .NET.

Discriminated unions håndteres fornuftigt — case-navnet lander som element-tag, og payloaden bliver til child-elementer. Indlejrede records foldes ud inline, tuple-felter kommer ud som søskende-elementer, og Map<K,V> bliver til <Entry><Key/><Value/></Entry>-par. For attributtstyret tilpasning ([<XmlElement>], [<XmlAttribute>]) — se F#-dokumentationen om .NET-interop. Konverteren respekterer dem, når de er til stede.

Sådan bruger du det

Tre trin. Virker ens, om du indsætter en record på én linje eller et helt modul.

1

Indsæt din F# (eller prøv eksemplet)

Smid F# ind som det er i venstre editor. En record type, en udfyldt let-binding, flere records, eller en discriminated union — alt går. Klik først på Indlæs eksempel for et realistisk eksempel.

Du behøver ikke fjerne open-statements eller rydde op i F#-syntaksen. Lad koden stå, som den ser ud i Rider eller VS Code. Bare indsæt.

2

Tryk Konverter

Klik på den grønne Konverter-knap. Værktøjet parser recordsne, går gennem den udfyldte værdi, og bygger XML'en i ét hug. En kort loading-indikator viser sig, mens det kører.

3

Kopier XML

Højre panel fyldes med indrykket, velformet XML, som enhver standardoverholdende parser vil acceptere. Indsæt det direkte i din app.config, en SOAP-fixture, en XmlSerializer-round-trip-test, eller din dokumentation.

Hvornår det virkelig er smart

.NET XML-konfigurationsfiler

En F#-record, der modellerer en app.config- / web.config-sektion, bliver til en redigerbar XML-skabelon — ingen mere angle-bracket-klatten i hånden.

WCF- og SOAP-fixtures

Du har en F#-record, der spejler en WCF-data-contract. Indsæt den, hent SOAP-formatteret body, smid ind i SoapUI eller Postman.

Fable-interop med legacy-XML-endpoints

Bruger du Fable til at snakke med et ældre XML-API? Indsæt den delte F#-record og få den XML-body, din backend forventer, med option-felter håndteret korrekt.

Testdata til XmlSerializer

Generer XML-seed-data, der round-tripper via <code>XmlSerializer&lt;T&gt;</code> uden overraskelser — praktisk til integrationstests, mock-servere og regressionssuites.

Typiske spørgsmål

Kan jeg indsætte flere records på én gang?

Ja — indsæt et helt modul. Hver record type kommer igennem med indlejrede records foldet ud og typedefinitioner kædet med and håndteret. Discriminated-union-cases beholder case-navnet som element-tag.

Hvordan håndteres option, None og defaults?

En option<string> med Some "x" bliver til et normalt element, der indeholder teksten. None bliver et tomt element, så formen forbliver stabil — du mister ikke felter mellem udfyldte og tomme records. voption opfører sig på samme måde.

Hvad med decimal, DateTime, Guid og de drilske typer?

Decimaler (249.99m) taber suffikset og bliver til rent numerisk tekst. DateTime, DateTimeOffset og TimeSpan bliver til ISO-8601-strenge. Guid forbliver i det kanoniske 8-4-4-4-12 hex-format. byte[] bliver til base64-tekst — svarende til opførslen hos XmlSerializer.

Virker discriminated unions?

Ja. En DU som type Status = Active | Suspended of reason: string udsender <Active/> for det nullariske case og <Suspended><reason>...</reason></Suspended> for payload-caset. Case-navnet lander som element-tag — oftest præcis det, du vil have til XML, der matcher et skema.

Bliver min kode gemt?

Din kode sendes til backenden til konverteringen og persisteres ikke — vi logger ikke payloaden. Hvis F# er følsom (interne contracts, API-nøgler i literaler), så se over den, før du indsætter.

Hvad hvis F# bruger computation expressions eller active patterns?

De producerer ikke XML-felter — det er control-flow-konstruktioner, ikke data. Vi kigger på record-typedefinitionerne og den udfyldte instans, så et async { ... } eller et banana-clip-pattern-match ignoreres. Ret åbenlyse syntaksfejl først, så parseren har noget rent at tygge på.

Andre værktøjer du måske skal bruge

F# til XML er ét stykke. Disse spiller godt sammen med det: