Convertitore F# to XML
Incolla record o valori F#. Ti torna XML pulito.
Cosa fa questo tool
Se scrivi F# e lavori vicino a file di configurazione .NET XML, contratti WCF o endpoint SOAP, conosci già il dolore: i tuoi record sono puliti ed espressivi, ma scrivere a mano l'XML corrispondente è una faticaccia. Incolla l'F# qui e ottieni XML ben formato in una sola passata — un singolo record, un let binding popolato, o un intero modulo con record annidati.
Il convertitore conosce le peculiarità di F# che ti interessano davvero. Un option<string> con Some "x" diventa un elemento normale; None diventa un elemento vuoto invece di sparire, così la forma dell'XML resta prevedibile. I letterali decimal (249.99m) perdono il suffisso. list, seq e array diventano elementi contenitore con un figlio per item — in linea con ciò che System.Xml.Serialization emette sotto il cofano quando fai un round-trip tramite .NET.
Le union discriminate vengono gestite con buon senso — il nome del caso atterra come tag dell'elemento e il payload diventa elementi figli. I record annidati si espandono inline, i campi tuple escono come elementi fratelli, e Map<K,V> diventa coppie <Entry><Key/><Value/></Entry>. Per personalizzazioni guidate da attributi ([<XmlElement>], [<XmlAttribute>]), dai un'occhiata ai docs F# sull'interop .NET — il convertitore li rispetta quando ci sono.
Come si usa
Tre passaggi. Funziona uguale sia che incolli un record in una riga sia un intero modulo.
Incolla il tuo F# (o prova l'esempio)
Butta l'F# così com'è nell'editor di sinistra. Un record type, un let binding popolato, più record, o una union discriminata — tutto va bene. Clicca Carica esempio prima, per un caso realistico.
Non serve togliere gli open né ripulire la sintassi F#. Lascia il codice come appare in Rider o VS Code. Incolla e basta.
Clicca Converti
Clicca il pulsante verde Converti. Il tool fa il parse dei record, percorre il valore popolato e costruisce l'XML in una passata. Durante l'esecuzione compare un piccolo indicatore di caricamento.
Copia l'XML
Il pannello a destra si riempie di XML indentato e ben formato, che qualsiasi parser conforme agli standard accetterà. Incollalo direttamente nel tuo app.config, in una fixture SOAP, in un test di round-trip con XmlSerializer, o nei tuoi docs.
Quando serve davvero
File di configurazione XML .NET
Un record F# che modella una sezione di app.config / web.config diventa un template XML pronto da modificare — niente più angle brackets scritti a mano.
Fixture WCF e SOAP
Hai un record F# che rispecchia un data contract WCF. Incollalo, prendi il body in forma SOAP, buttalo in SoapUI o Postman.
Interop Fable con endpoint XML legacy
Usi Fable per parlare con un'API XML più vecchia? Incolla il record F# condiviso e ottieni il body XML che il tuo backend si aspetta, con i campi option gestiti correttamente.
Dati di test per XmlSerializer
Genera dati XML seed che fanno round-trip pulito con <code>XmlSerializer<T></code> senza sorprese — utile per test di integrazione, mock server e suite di regressione.
Domande frequenti
Posso incollare più record insieme?
Sì — incolla un intero modulo. Ogni record type arriva con i record annidati espansi e le definizioni di tipo concatenate con and gestite. I casi di union discriminata mantengono il nome del caso come tag dell'elemento.
Come gestisce option, None e i default?
Un option<string> con Some "x" diventa un elemento normale che contiene il testo. None diventa un elemento vuoto, così la forma resta stabile — non perderai campi tra record popolati e non popolati. voption si comporta allo stesso modo.
E con decimal, DateTime, Guid e i tipi rognosi?
I decimal (249.99m) perdono il suffisso e diventano testo numerico pulito. DateTime, DateTimeOffset e TimeSpan diventano stringhe ISO-8601. Guid resta nel formato canonico hex 8-4-4-4-12. byte[] diventa testo base64 — in linea col comportamento di XmlSerializer.
Le union discriminate funzionano?
Sì. Una DU tipo type Status = Active | Suspended of reason: string emette <Active/> per il caso nullario e <Suspended><reason>...</reason></Suspended> per il caso con payload. Il nome del caso diventa il tag dell'elemento — di solito è quello che vuoi per un XML che si allinea a uno schema.
Il mio codice viene salvato?
Il tuo codice viene mandato al backend per la conversione e non viene persistito — non logghiamo il payload. Se l'F# è sensibile (contratti interni, API key nei letterali), rivedilo prima di incollare.
E se l'F# usa computation expression o active pattern?
Quelli non producono campi XML — sono costrutti di controllo di flusso, non dati. Guardiamo le definizioni dei record type e l'istanza popolata, quindi un async { ... } o un match a banana-clip viene ignorato. Sistema prima gli errori di sintassi evidenti, così il parser ha qualcosa di pulito da masticare.
Altri tool che possono servirti
F# to XML è un pezzo del puzzle. Questi si accompagnano bene: