Guide

Convert JSON to C# Classes: System.Text.Json vs Newtonsoft

A generator gives you a working first draft of the classes. The details that bite later are property name matching, number types and nullability.

Updated

Try it now: JSON to C# Converter. It runs in your browser, with no signup.

Start from a sample object

Paste one representative JSON object. The generator creates a class for the root and a class for each nested object, and arrays become List<T>.

{
  "id": 42,
  "user_name": "ada",
  "is_active": true,
  "tags": ["dev", "math"]
}

Map JSON names to C# names

In the JSON to C# Converter, the Property attributes menu adds either style to every property.

// System.Text.Json
using System.Text.Json.Serialization;
public class User {
    [JsonPropertyName("id")]        public int Id { get; set; }
    [JsonPropertyName("user_name")] public string UserName { get; set; }
}

// Newtonsoft.Json
using Newtonsoft.Json;
public class User {
    [JsonProperty("id")]        public int Id { get; set; }
    [JsonProperty("user_name")] public string UserName { get; set; }
}

Case sensitivity: the usual surprise

System.Text.Json matches property names case-sensitively by default, so "name" will not fill a property called Name unless you opt in. Newtonsoft.Json matches case-insensitively by default.

  • To map snake_case keys without an attribute on every property, set PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower (.NET 8 and later).
var options = new JsonSerializerOptions {
    PropertyNameCaseInsensitive = true,
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
var user = JsonSerializer.Deserialize<User>(json, options);

Fix the types a sample cannot reveal

  • Numbers: one sample cannot tell int from long, double or decimal. Use decimal for money, long for large IDs, int for small counts.
  • Nullable values: a null or missing field needs a nullable type, such as string? or int?.
  • Dates: ISO 8601 strings such as 2026-11-01T10:00:00Z deserialize into DateTime or DateTimeOffset.
  • Arrays of mixed types: the generator cannot infer a single type, so define a proper model.
  • Keys that are C# keywords, such as class or event, need an @ prefix or an attribute.

Records for immutable models

For read-only data transfer objects, a positional record is shorter. System.Text.Json can deserialize records through their constructor.

public record User(int Id, string UserName, bool IsActive, List<string> Tags);

Frequently asked questions

Which library should I pick for a new project?

System.Text.Json is built into .NET and is the default choice. Use Newtonsoft.Json when you rely on its features or already depend on it.

Can I convert a JSON array to a class?

Paste a single object from the array. The converter expects the root value to be an object, and arrays of objects inside it become List<T>.

Why is a property null after deserializing?

The most common causes are a name mismatch (case sensitivity or snake_case), a missing setter, or a type the serializer cannot convert.

Tools used in this guide

onlinedevelopertool.com is a collection of 54 free, browser-based utilities for the small jobs that interrupt real work: formatting a JSON response, decoding a token, converting a timestamp, generating a UUID or checking a hash. Each tool has its own page with a short explanation, a worked example and answers to common questions, so you can use it and learn what it does at the same time.

There is no account to create and nothing to install. Tools run in your browser, so the text you paste is processed on your own device. The one exception is the Website Status Checker, which sends a request from your browser to the address you enter.

Three steps: paste your input, click the tool, copy the result, all inside your browser
Popular developer utilities: JWT decoder, UUID generator, Base64 decoder, SHA-256 hash, regex tester and timestamp converter

What you can do here

  • JSON Tools

    Format, validate, beautify and minify JSON, generate C#, TypeScript, Java, Python, Go, PHP and Kotlin models from it, or convert between JSON, YAML and CSV.

  • Encoders & Decoders

    URL, Base64 and HTML encoding and decoding, plus a JWT decoder for reading token claims.

  • Generators & Hashes

    Generate UUIDs and JWTs, validate UUIDs, and create MD5, SHA-256 and SHA-512 hashes.

  • Web Tools

    Timestamps, color codes, query strings and cron expressions - the small things web work keeps throwing at you.

  • Text & Data

    Format XML and YAML, count text, change case, make slugs, test regex, diff two texts and convert number bases.

  • Website Checking

    Check whether a website or URL is reachable from your browser.

Quick developer reference

  • JSON

    Keys and strings must use double quotes, and trailing commas and comments are not allowed. Those are the three most common reasons a payload fails to parse.

    Validate JSON
  • JWT

    A JSON Web Token is three Base64URL parts joined by dots: header, payload and signature. Decoding shows the claims but does not prove the token is genuine; only signature verification does.

    Decode a JWT
  • Base64

    Base64 is an encoding, not encryption. Anyone can reverse it, and it makes data roughly one third larger, so never use it to hide secrets.

    Decode Base64
  • UUID

    A version 4 UUID is made of random bits and written as 8-4-4-4-12 hexadecimal characters. Collisions are astronomically unlikely, which is why they work well as identifiers.

    Generate a UUID
  • Timestamps

    A Unix timestamp counts time since 1 January 1970 UTC. Ten digits usually means seconds and thirteen digits usually means milliseconds.

    Convert a timestamp
  • Hashes

    MD5 is fine for quick checksums but is not safe for security. Prefer SHA-256 or SHA-512, and remember that hashing is one-way and is not encryption.

    Create a SHA-256 hash

Missing a tool you need? Visit the contact page and tell us what you reach for most often. You can also browse every tool or read the About page to see how the site is built and what it does with your data.