POCO with [JsonProperty] or System.Text.Json defaults?
The generator emits a clean POCO that works with both System.Text.Json (the .NET 5+ default) and Newtonsoft.Json out of the box because property names are PascalCase mapped from the JSON key. For JSON keys that do not match a valid C# identifier — or to preserve a snake_case wire format — annotate the property with [JsonPropertyName("original_key")] for System.Text.Json or [JsonProperty("original_key")] for Newtonsoft.
Are nullable reference types used?
Yes. With <Nullable>enable</Nullable> set in your .csproj, JSON null values produce nullable reference types like string? and the generator emits object? for fields whose value is JSON null. Non-null sample values produce non-nullable string and value types like int and bool, which matches the C# 8+ nullable annotation contract.
How do I deserialize the generated POCO?
With System.Text.Json: var root = JsonSerializer.Deserialize<Root>(json); — the generated POCO has public auto-properties and a default constructor, which is everything the deserializer requires. With Newtonsoft.Json: var root = JsonConvert.DeserializeObject<Root>(json);
Can I generate C# 9+ records instead of classes?
The generator emits classes with auto-properties — they are the most compatible across .NET Framework, .NET Core, and .NET 5+. To convert to a record, replace public class Root { ... } with public record Root(int Id, string Name, ...); — both work with System.Text.Json once the constructor parameter names match the JSON keys (case-insensitive by default).
Why are properties generated as int instead of int??
A non-null integer in the JSON sample produces a non-nullable int because that is the most expressive type. If the field can be null in some payloads, change int to int? manually — System.Text.Json maps JSON null to a null Nullable<int> only when the property type is int?.
How are JSON arrays mapped to C#?
Arrays of objects become List<ClassName> using System.Collections.Generic. Arrays of strings become List<string>; arrays of mixed primitives fall back to List<object>. Both serializers handle List<T> directly — no extra converter required.
How are JSON keys with dashes or reserved words handled?
A JSON key like "user-id" is converted to UserId in PascalCase. Reserved C# words such as "class" or "namespace" are still legal as property identifiers when prefixed with @ (e.g. @class). Add [JsonPropertyName("user-id")] to preserve the wire-format key during serialization.
Is the JSON uploaded to your servers?
No. Conversion runs entirely in your browser via JavaScript. Open DevTools → Network and click Convert — no requests are made. JSON containing API keys, internal field names, or PII never leaves your machine.