Klistra in F# till vänster och klicka på "Konvertera" — vi gör om det till XMLKlistra in F#-kod

Vad verktyget gör

Om du skriver F# och jobbar i närheten av .NET XML-config, WCF-contracts eller en SOAP-endpoint känner du igen smärtan: dina record-typer är rena och uttrycksfulla, men att skriva motsvarande XML för hand är ett helvete. Klistra in F#-koden här så får du tillbaka välformat XML i ett svep — en enskild record, ett fyllt let-binding, eller en hel modul med nästlade records.

Konverteraren kan de F#-egenheter du faktiskt bryr dig om. En option<string> med Some "x" blir ett vanligt element; None blir ett tomt element istället för att försvinna, så XML-formen förblir förutsägbar. decimal-literaler (249.99m) tappar sitt suffix. list, seq och arrayer blir container-element med ett barn per item — matchande det System.Xml.Serialization emittar under huven när du round-trippar via .NET.

Discriminated unions hanteras med sunt förnuft — case-namnet blir element-taggen och payloaden blir barnelement. Nästlade records vecklas ut inline, tuple-fält kommer ut som syskonelement, och Map<K,V> blir <Entry><Key/><Value/></Entry>-par. För attributstyrd anpassning ([<XmlElement>], [<XmlAttribute>]) — se F#-dokumentationen om .NET-interop. Konverteraren respekterar dem när de finns på plats.

Så här gör du

Tre steg. Funkar likadant oavsett om du klistrar in en enradig record eller en hel modul.

1

Klistra in din F# (eller testa exemplet)

Släpp ner F#-koden som den är i vänstra editorn. En record type, ett fyllt let-binding, flera records, eller en discriminated union — allt funkar. Klicka på Ladda exempel först för ett realistiskt fall.

Du behöver inte rensa bort open-statements eller putsa upp F#-syntaxen. Låt koden vara som den ser ut i Rider eller VS Code. Bara klistra in.

2

Klicka Konvertera

Klicka på den gröna Konvertera-knappen. Verktyget parsar recordsen, går igenom det fyllda värdet, och bygger XML i ett svep. En kort laddningsindikator syns medan det körs.

3

Kopiera XML

Högerpanelen fylls med indenterad, välformad XML som vilken standardkompatibel parser som helst accepterar. Klistra in den direkt i din app.config, en SOAP-fixture, ett XmlSerializer-round-trip-test, eller din docs.

När det faktiskt kommer väl till pass

.NET XML-configfiler

En F#-record som modellerar en app.config- / web.config-sektion blir en redigerbar XML-mall — inget mer handskrivna angle brackets.

WCF- och SOAP-fixtures

Du har en F#-record som speglar ett WCF-data-contract. Klistra in, få SOAP-formad body, släng in i SoapUI eller Postman.

Fable-interop med gamla XML-endpoints

Använder du Fable för att prata med ett äldre XML-API? Klistra in den delade F#-recorden och få den XML-body din backend förväntar sig, med option-fält korrekt hanterade.

Testdata för XmlSerializer

Generera XML-seed-data som round-trippar via <code>XmlSerializer&lt;T&gt;</code> utan överraskningar — praktiskt för integrationstester, mock-servrar och regressionssviter.

Vanliga frågor

Kan jag klistra in flera records samtidigt?

Ja — klistra in en hel modul. Varje record type kommer ut med nästlade records expanderade och typdefinitioner kedjade med and hanterade. Discriminated-union-cases behåller case-namnet som element-tagg.

Hur hanteras option, None och default-värden?

En option<string> med Some "x" blir ett vanligt element som innehåller texten. None blir ett tomt element så att formen förblir stabil — du tappar inte fält mellan ifyllda och tomma records. voption beter sig likadant.

Hur med decimal, DateTime, Guid och de stökiga typerna?

Decimaler (249.99m) tappar suffixet och blir vanlig numerisk text. DateTime, DateTimeOffset och TimeSpan blir ISO-8601-strängar. Guid stannar i kanoniskt 8-4-4-4-12 hex-format. byte[] blir base64-text — matchar beteendet hos XmlSerializer.

Funkar discriminated unions?

Ja. En DU som type Status = Active | Suspended of reason: string emittar <Active/> för det nulläriska fallet och <Suspended><reason>...</reason></Suspended> för payload-fallet. Case-namnet blir element-tagg — oftast precis vad du vill ha för XML som matchar ett schema.

Sparas min kod?

Din kod skickas till backenden för konverteringen och persisteras inte — vi loggar inte payloaden. Om F# är känslig (interna contracts, API-nycklar i literaler), titta över den innan du klistrar in.

Vad om F# använder computation expressions eller active patterns?

De producerar inga XML-fält — det är control-flow-konstruktioner, inte data. Vi tittar på record-typdefinitionerna och den ifyllda instansen, så ett async { ... } eller en banana-clip-pattern-match ignoreras. Fixa uppenbara syntaxfel först så parsern har nåt rent att tugga på.

Andra verktyg du kanske behöver

F# till XML är en pusselbit. De här passar bra ihop med den: