Hard boundary: This page reads one sample tree. It does not load XSD, WSDL, or XSD choice sequences, and it will not prove equivalence with your production feed. Treat the output as a sketch you refine in Visual Studio or Rider. If you need to probe paths before modeling, open the XPath tester on the same site and validate shape assumptions there first.
What the serializer refuses to invent for you
Strongly typed C# wants stable names, repeatable shapes, and a plan for optional nodes. A single pasted document never proves that a sibling will always appear, or that an attribute stays numeric under stress.
Namespaces on element names collapse to local names here, which keeps the preview short and readable. That shortcut breaks the moment you serialize back into XML with prefixes your partner expects.
Mixed content, comments, processing instructions, and text squeezed between child tags are easy to miss in a quick generator pass. Expect hand edits when your feed includes those patterns.
Walk the tree once, emit typed properties
The script parses with the browser DOM engine, walks element children, and groups siblings by tag name. A lone child becomes a nested type reference. Repeating siblings become List<T> with XmlArray hints when annotations stay enabled.
Leaf nodes pick int, float, bool, or string from the text they contain on that single observation. The next file in production might carry decimals in a field you saw as an integer during testing.
Attributes map only when the checkbox stays on. Turning annotations off yields bare properties you wire manually, which some teams prefer before they lock serialization attributes.
Catalog feed: before and after
The bundled sample mirrors a tiny product list: two Product elements, prices as decimals, a boolean stock flag, and a sku attribute. Use rows below to sanity-check naming before you paste proprietary XML.
| Fragment | What you should see in C# |
|---|---|
sku on Product | A string property with XmlAttribute when annotations are on. |
Repeated Product entries | A list property on the root unless you flatten manually afterward. |
Price text 12.50 | Inferred as float on this pass. Switch to decimal in your project if money rules require it. |
- Sample XML tail
- <Price currency="USD">12.50</Price><InStock>true</InStock>
- Typical emitted shape
- public float Price { get; set; } public bool InStock { get; set; }
When xsd.exe still wins
Microsoft ships xsd.exe for a reason. XSD gives cardinality, data types, and substitution rules that a single instance never encodes. If you own the schema, generating bindings from XSD or moving through dotnet-svcutil for SOAP remains the steadier long-term path.
We still reach for browser-first tools when the schema is missing, when we only need a disposable DTO for a spike, or when legal blocks uploading a file. In those moments, starting from a redacted sample beats waiting on a formal pipeline.
For JSON-heavy services, generating TypeScript or plain objects sometimes fits better than C#. If your next hop is an API layer, compare against the XML to JSON tool on Toolexe before you commit to a full C# model.
Three foot-guns teams step on
- Pasting production XML with secrets inside a shared screen recorder session. The page does not upload data, yet your screen still leaks.
- Assuming inferred numeric types match accounting rules. Promote money fields to
decimaland wireCultureInfowhere parsing happens. - Shipping generated
recordoutput without reviewing immutability and serialization support against your actual .NET target.
