JSON 转 C#
暂无内容
免费在线 JSON 转 C# 工具,把 API 响应或配置 JSON 一键转成可直接在 ASP.NET Core、Unity、Blazor、.NET MAUI 项目里使用的标准 C# 类。支持 [JsonProperty] 注解、List 泛型、Nullable<T>、嵌套类自动拆分,完全本地浏览器生成。
暂无内容
免费在线 JSON 转 C# 工具,把 API 响应或配置 JSON 一键转成可直接在 ASP.NET Core、Unity、Blazor、.NET MAUI 项目里使用的标准 C# 类。支持 [JsonProperty] 注解、List 泛型、Nullable<T>、嵌套类自动拆分,完全本地浏览器生成。
JSON 转 C# 是把 JSON 格式的数据(对象或数组)转换为 C# 类定义(POCO,Plain Old CLR Object)的过程。C# 是 .NET 生态的主力语言,广泛用于 ASP.NET Core 后端、Unity 游戏、.NET MAUI 跨平台应用、Blazor WebAssembly、桌面应用(WPF / WinForms)、Azure 云服务等场景。开发中经常需要把 API 文档或实际响应中的 JSON 样本转成 C# 类型,手写类不仅重复劳动多,还容易把字段类型和注解写错,本工具的目标就是把这一过程自动化。
本工具基于 quicktype-core 在浏览器本地运行,使用 C# 渲染器生成标准的 POCO class 代码。默认输出包含 using System.Collections.Generic; 和 [JsonProperty("原始 key")] 注解(Newtonsoft.Json 兼容模式),可以直接在 Visual Studio 中打开编译。这意味着你拿到的不只是类型草稿,而是能够放进 .NET 项目、配合 NuGet 包即可使用的 C# 类。
类型推断是 JSON 转 C# 的核心。工具会把 JSON 的基本类型映射到 .NET 标准类型:字符串 → string,整数 → long,浮点数 → double,布尔值 → bool,数组 → List<T>,嵌套对象 → 独立的 class,null 值 → Nullable<T>(如 long? / bool? / string?)。对于嵌套对象,工具会自动为每个层级创建新的 class,并按字段名首字母大写命名,例如 address 字段会生成 Address 类,items 数组中的对象会生成 Item 类。
与现代 C# 语法结合:本工具默认生成可序列化的 POCO(公有 { get; set; } 属性)。对于追求不可变性的项目,开发者可以把 class 改为 C# 9+ 的 record 类型,把 { get; set; } 改为 init-only 属性(public string Name { get; init; }),配合 JsonSerializer.Deserialize<T>(jsonString) 即可在编译期保证数据不可被修改。这与 ASP.NET Core 7+ 的 Minimal API、Entity Framework Core 8+ 的不可变实体设计趋势一致。
与一些需要把 JSON 上传到服务器处理的在线工具不同,本工具的所有计算都在浏览器内完成。quicktype-core 通过 Web Worker 加载和执行,JSON 解析、类型推断、C# 代码生成、文件下载都在本地进行,不向任何服务器发送数据。这对于包含 API key、用户隐私字段、未上线业务结构的 JSON 尤其重要,关闭页面后数据即从内存中清除。
需要注意的是,自动生成的代码是起点而不是终点。工具按 JSON 样本推断类型,无法判断业务上的精确类型(例如 URL、Email、ID 等语义类型都会被推断为 string)。对于 snake_case 的 JSON 字段,C# 字段会保持 PascalCase 命名(user_name → UserName),但 [JsonProperty("user_name")] 注解会保留原始 key,反序列化时自动映射。建议把生成结果作为初稿,再根据项目规范微调字段名、类型和特性。
ASP.NET Core 项目中,最常见的用法:把本工具生成的 POCO 用 Newtonsoft.Json 反序列化 API 响应。
using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Threading.Tasks;
public class ApiClient
{
private static readonly HttpClient _http = new HttpClient();
// 本工具生成的 POCO:
public class User
{
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("is_active")]
public bool? IsActive { get; set; }
}
public static async Task<User> GetUserAsync(int userId)
{
// 1) 调用 API 获取 JSON 字符串
var json = await _http.GetStringAsync($"https://api.example.com/users/{userId}");
// 2) 反序列化为本工具生成的 POCO
// 内部按 [JsonProperty("id")] 等注解自动映射 snake_case JSON
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine($"User: {user.Name} ({user.Email})");
return user;
}
}把本工具生成的 User POCO 放到 ASP.NET Core Controller 中,配合 [FromBody] 自动接收前端 JSON 请求。
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
// 本工具生成的 POCO(默认使用 Newtonsoft [JsonProperty]):
public class CreateOrderRequest
{
[Newtonsoft.Json.JsonProperty("user_id")]
public long UserId { get; set; }
[Newtonsoft.Json.JsonProperty("items")]
public List<OrderItem> Items { get; set; }
}
public class OrderItem
{
[Newtonsoft.Json.JsonProperty("product_id")]
public long ProductId { get; set; }
[Newtonsoft.Json.JsonProperty("quantity")]
public long Quantity { get; set; }
}
[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
[HttpPost]
public IActionResult Create([FromBody] CreateOrderRequest request)
{
if (request == null || request.Items == null || !request.Items.Any())
{
return BadRequest("Items cannot be empty");
}
// 业务逻辑:保存订单
// var order = OrderService.Create(request);
return Ok(new { order_id = 12345, status = "created" });
}
}
/*
* 对应 .csproj 依赖:
* <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0" />
* <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
*/.NET 5+ / .NET 7+ 推荐用法:使用 System.Text.Json 内置扩展方法 + record 类型,配合 [JsonPropertyName] 注解。
using System.Net.Http.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
// 本工具默认生成 POCO class;如下手动改为 record 类型(不可变数据载体):
public record User
{
[JsonPropertyName("id")]
public long Id { get; init; }
[JsonPropertyName("name")]
public string Name { get; init; }
[JsonPropertyName("email")]
public string Email { get; init; }
[JsonPropertyName("is_active")]
public bool? IsActive { get; init; }
}
public class ApiClient
{
private static readonly HttpClient _http = new HttpClient();
public static async Task<User> GetUserAsync(int userId)
{
// System.Text.Json:GetFromJsonAsync 一行完成 HTTP + 反序列化
var user = await _http.GetFromJsonAsync<User>(
$"https://api.example.com/users/{userId}");
System.Console.WriteLine($"User: {user.Name} ({user.Email})");
return user;
}
}
/*
* 对应 .csproj 依赖(System.Text.Json 是内置的,无需额外安装):
* <TargetFramework>net7.0</TargetFramework>
*
* 如果你的项目是 .NET 7+ 并且想用 [JsonProperty] 兼容 Newtonsoft 写法,
* 可在 Program.cs 中添加:
* builder.Services.AddControllers()
* .AddNewtonsoftJson(options =>
* {
* options.SerializerSettings.ContractResolver =
* new Newtonsoft.Json.Serialization.DefaultContractResolver();
* });
*/在 .csproj 添加 <Nullable>enable</Nullable>,本工具生成的 string? / List<User>? 等可空类型会自动获得编译期空检查,避免 NullReferenceException 运行时崩溃。
本工具会自动把 JSON 字段转为 PascalCase(如 user_name → UserName),同时在 [JsonProperty] 注解里保留原 key。这样代码符合 .NET 官方命名规范,反序列化仍按 JSON 原 key 工作。
嵌套层级超过 4 层时,建议把根对象拆分为多个独立 POCO,分别负责不同业务领域(如 UserDto / OrderDto / PaymentDto),避免一个巨大类包含所有字段,提升可维护性。
不要把本工具生成的 POCO 同时作为 EF Core Entity 和 API DTO。建议:① API 层使用 DTO(基于 JSON 生成);② EF Core 层使用 Entity(手动加 [Key] / [Required] 等数据注解);③ 通过 AutoMapper / Mapster 做 DTO ↔ Entity 映射。避免直接暴露数据库结构给前端。
如果项目使用 System.Text.Json,建议用 IDE 全局替换把生成的 [JsonProperty("xxx")] 改为 [JsonPropertyName("xxx")]。或保持原 [JsonProperty] + 安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包并调用 AddNewtonsoftJson() 兼容 Newtonsoft 语法。
本工具所有计算在浏览器本地完成,但建议在企业内部再加一层防护:① 不要把含生产数据库连接串 / API 主密钥的 JSON 复制到任何在线工具;② 内部 POCO 生成建议使用 NSwag 或 Visual Studio Paste JSON as Classes 完全离线生成;③ 仅对脱敏后的样例 JSON 使用在线工具。
超过 1MB 的 JSON 在浏览器中渲染会变慢。建议:① 拆分为多个独立 POCO 类(如 User.cs / Address.cs / Order.cs)按业务模块分类;② 对超大 JSON Schema(100+ 字段)使用 NSwag 或 Visual Studio 内置功能直接生成;③ 仅用本工具处理中小型 API 响应(< 100 字段)。
对于不需要修改的 DTO / 响应模型,建议把生成的 class 改为 C# 9+ record,把 { get; set; } 改为 { get; init; }。这样:① 编译期保证数据不可被修改;② 自动获得值相等性比较(Equals / GetHashCode);③ 与 with 表达式配合可简化对象拷贝。
把 JSON 内容粘贴到左侧输入框,工具会在 400ms 内通过 quicktype-core 自动调用生成 C# 类,右侧显示完整代码。也可以点击「上传」按钮选择 .json / .txt 文件,或点击「示例」加载内置数据。生成后可点击「复制」按钮把单个类复制到剪贴板,或下载为 .cs 文件。
包含。工具默认使用 Newtonsoft.Json 兼容模式,为每个字段自动添加 [JsonProperty("原始 key")] 特性。这样即使字段名被转为 PascalCase,反序列化时仍能按原始 JSON key 正确映射。如果你使用 System.Text.Json,可在生成后把 [JsonProperty] 改为 [JsonPropertyName](语义相同),或者直接使用 System.Text.Json 默认的命名策略([JsonPropertyName] 在 System.Text.Json 里也可通过自定义 JsonNamingPolicy 处理)。
默认生成可序列化的 POCO class(含 { get; set; } 属性)。如果你的项目使用 C# 9+ 的 record 类型(不可变数据载体,适合 DTO / 不可变模型),可在生成后手动把 class 改为 record,并把 { get; set; } 改为 init-only 属性(public string Name { get; init; })。record 类型在 ASP.NET Core 7+ 的 Minimal API 和 Entity Framework Core 中被广泛使用。
支持所有合法 JSON 结构:基本类型(null、boolean、number、string)、数组(一维或多维)、嵌套对象(任意深度)。根输入可以是 JSON 对象或 JSON 数组,JSON 对象会生成 public class Root,JSON 数组会生成 public class Root : List<Item>。不支持 JavaScript 特有值(函数、Symbol、undefined、Date 对象等)。
字符串 → string,整数 → long,浮点数 → double,布尔值 → bool,数组 → List<T>,嵌套对象 → 独立 class,null 值字段 → Nullable<T>(如 long? / bool? / string?)。具体映射规则详见页面下方的「JSON 类型到 C# 类型映射速查表」。
会。工具会检测 JSON 中显式为 null 或缺失的字段,自动把它们生成为 Nullable<T> 形式(如 long? Id { get; set; })。这与 C# 8+ 引入的 Nullable Reference Types(NRT)特性一致,能让编译器在静态分析时帮你发现空引用风险。注意:如果你启用了 NRT,引用类型默认是非空的,需要显式写 string? 才能表示可空。
会。JSON 数组统一转换为 C# List<T>,元素类型按数组首项自动推断。字符串数组 → List<string>,整数数组 → List<long>,对象数组 → List<Item>。空数组 [] 由于无法推断元素类型,默认生成 List<object>,生成后建议手动改为具体类型(如 List<MyClass>)。如果你更喜欢 T[] 数组语法,可在生成后用 IDE 的 Find & Replace 批量替换。
工具会为每个嵌套对象生成独立的 C# 类。命名规则为字段名首字母大写(如 address → Address)。如果根对象包含 items 数组且元素是对象,则会生成 public class Item 类,再由 public List<Item> Items { get; set; } 引用。相同结构的对象会被复用同一类型,避免重复定义。
可以。quicktype-core 默认使用 JSON 源名称(如 Root)作为根类名。你可以在生成后手动修改类名、namespace 和所有引用位置。下载的 .cs 文件名同样可在保存时按需重命名(如改为 User.cs、Order.cs)。
可以直接使用。生成的文件是标准 C# 语法,包含 using System.Collections.Generic; 引用。把 .cs 文件放入 .NET 项目的根目录或子目录,在 .csproj 中无需添加额外依赖(System.Text.Json 是 .NET 内置的;Newtonsoft.Json 需要通过 NuGet 安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 或 Newtonsoft.Json 包)。之后即可用 JsonConvert.DeserializeObject<T>(jsonString) 或 JsonSerializer.Deserialize<T>(jsonString) 反序列化。
完全本地浏览器运行。所有 JSON 解析、C# 代码生成、文件下载都在浏览器内通过 JavaScript + WebAssembly 完成。输入的 JSON 数据和生成的 C# 代码都不会上传到任何服务器,也不会被记录或缓存到云端。包含 API key、token、未公开业务字段的敏感 JSON 可以放心使用,关闭页面即清除。
不需要。工具完全免费、无需注册、登录或授权。打开页面即可使用,所有功能在浏览器本地可用。
工具会自动检测 JSON 合法性,错误时会在右侧显示红色错误提示,并提供「修复 JSON」按钮。点击后可自动修复常见错误:末尾多余逗号、单引号替换为双引号、缺失引号的 key 补全引号、注释移除等。修复成功后会继续生成 C# 代码。
两者都是 .NET 生态最主流的 JSON 库。Newtonsoft.Json(也称 Json.NET)是历史最久、生态最丰富的库,几乎所有 .NET 项目都兼容;System.Text.Json 是 .NET Core 3.0+ 内置的高性能库,启动更快、内存更省、AOT 友好。ASP.NET Core 3.0+ 默认使用 System.Text.Json;老 .NET Framework 项目和大量第三方库默认依赖 Newtonsoft.Json。本工具默认生成 [JsonProperty] 兼容两者(System.Text.Json 在 .NET 7+ 也支持 Newtonsoft 兼容包 Microsoft.AspNetCore.Mvc.NewtonsoftJson)。
三者都是把 JSON 转成目标语言的类型定义,但输出形态不同:JSON 转 C# 生成带 [JsonProperty] 注解的 POCO class,配合 Newtonsoft.Json 或 System.Text.Json 可直接反序列化;JSON 转 Java 生成带 Lombok/Gson/Jackson 注解的 POJO;JSON 转 Rust 生成带 Serde derive 的 struct。三者侧重的生态系统不同,选择取决于你的技术栈。
System.Text.Json 默认不支持 string 与 DateTime 的自动转换,会抛出 JsonException。两种解决方案:① 在字段上加 [JsonConverter(typeof(DateTimeConverter))] 自定义转换器;② 在 Program.cs 配置全局 JsonSerializerOptions:options.PropertyNameCaseInsensitive = true; 并通过自定义 JsonConverter 处理 DateTime。Newtonsoft.Json 默认支持 DateTime 反序列化,但如果格式特殊(如 Unix 时间戳)也需要自定义 converter。
工具默认不生成 namespace,是为了保持代码片段的最大兼容性,方便用户复制到任意项目使用。如果你需要 namespace,可在生成后的代码顶部手动添加 namespace YourApp.Models; 并把类放在对应 .cs 文件中。在 .NET 项目中建议按功能模块组织 namespace(如 Models / Dtos / ViewModels / Entities)。
Visual Studio 2019+ 内置「Paste Special → Paste JSON as Classes」功能(编辑菜单 → 选择性粘贴),可以把 JSON 直接转成 C# 类。本工具生成的代码与该功能兼容:把工具生成的 C# 代码复制到剪贴板后,可粘贴到任意 .cs 文件中使用。如果你更喜欢 VS 内置功能,可直接使用 Edit → Paste Special → Paste JSON as Classes 而无需打开本工具。
左侧输入框为空或只有空白字符。确保已粘贴有效的 JSON 内容,或点击上传按钮选择 .json / .txt 文件,也可以点击示例按钮加载内置样例。
常见原因:末尾有多余逗号(如 {"a":1,})、使用了单引号而非双引号、key 未加双引号、包含 JavaScript 注释。点击「修复 JSON」按钮可自动修复部分错误;如果仍失败,请先用 JSON 格式化工具校验。
工具按 JSON 样本推断类型,例如所有整数都是 long、所有字符串都是 string。如果你需要 int / decimal / Guid / DateTime 等更精确类型,请在生成后手动修改字段类型。注意 System.Text.Json 默认不支持 DateTime,需要用 [JsonConverter] 自定义。
工具默认按 C# 8+ 的 Nullable Reference Types 形式生成(如 string? / List<User>?)。如果你的项目是老版本 .NET Framework / 未启用 NRT,所有引用类型默认为可空,string? 中的 ? 可直接删除(或在 .csproj 中启用 <Nullable>enable</Nullable>)。
在 .csproj 中添加以下 PackageReference: <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> 然后执行 dotnet restore,NuGet 会自动下载。如果使用 System.Text.Json 则无需安装(.NET 内置)。
工具会把 JSON 字段名自动转为 PascalCase(如 user_name → UserName),同时在 [JsonProperty] 注解里保留原始 key。Newtonsoft.Json 反序列化时会按 [JsonProperty] 映射,无需手动处理。如果使用 System.Text.Json 默认命名策略,需要把 [JsonProperty] 改为 [JsonPropertyName],或在 Program.cs 中配置 CamelCase 命名策略。
可能原因:① 未在 .csproj 添加 Newtonsoft.Json / System.Text.Json 依赖;② 类放在了不规范的目录(应放在 .NET 项目的根目录或子目录,且对应 namespace);③ 类名与项目中其他类型冲突。解决:添加依赖、调整目录和 namespace、重命名冲突的类。
ASP.NET Core 3.0+ 默认使用 System.Text.Json,而工具生成的 [JsonProperty] 是 Newtonsoft.Json 语法。两种解决方案:① 在 .csproj 中添加 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包,并在 Program.cs 调用 AddNewtonsoftJson();② 把生成的 [JsonProperty("xxx")] 全部改为 [JsonPropertyName("xxx")](System.Text.Json 语法)。
通常是数组为空 [] 时默认推断为 List<object>。可在源 JSON 中至少添加一个示例元素(如 [1,2,3]),工具会按首个元素推断类型;或生成后手动把 List<object> 改为 List<long> / List<int>。
建议把 JSON 拆成多个独立模块分别转换,或只提取需要建模的部分。浏览器渲染大量嵌套类时会消耗较多内存,超过 5MB 的 JSON 推荐使用 NSwag / Visual Studio 内置的「Paste JSON as Classes」功能处理。
工具根据 JSON 值的类型自动推断对应的 C# / .NET 类型:
| JSON 值示例 | 生成 C# 类型 | Nullable 形式 | 说明 |
|---|---|---|---|
null | 根据上下文推断 | T? | null 值字段自动推断为 Nullable<T>(如 long? / bool? / string?) |
true / false | bool | bool? | JSON 布尔值直接映射为 C# bool |
42 | long | long? | JSON 整数默认映射为 long(64 位整数,兼容大数) |
3.14 | double | double? | JSON 浮点数默认映射为 double(双精度浮点数) |
"hello" | string | string? | JSON 字符串映射为 C# string |
["a","b"] | List<string> | List<string>? | 字符串数组映射为 List<string> |
[1,2,3] | List<long> | List<long>? | 整数数组映射为 List<long> |
[{...},{...}] | List<Item> | List<Item>? | 对象数组按首个元素生成对应 class,再用 List 包装 |
[] | List<object> | List<object>? | 空数组无法推断元素类型,用 object 兜底,生成后建议改为具体类型 |
{...} 嵌套对象 | 独立 class | ClassName? | 嵌套对象生成独立 class,字段名首字母大写命名(address → Address) |
.NET 生态两大主流 JSON 库的字段映射特性对比,本工具默认生成 Newtonsoft 兼容的 [JsonProperty]:
| 对比项 | Newtonsoft.Json | System.Text.Json |
|---|---|---|
字段映射特性 | [JsonProperty("user_name")] | [JsonPropertyName("user_name")] |
默认命名策略 | 保持 PascalCase 字段名(需 [JsonProperty] 兼容 snake_case) | 保持原字段名(按 JSON key 匹配,CamelCase 默认) |
自定义命名 | [JsonProperty] 逐字段指定 | [JsonPropertyName] + JsonNamingPolicy 全局配置 |
空值处理 | NullValueHandling.Ignore / Include | JsonIgnoreCondition.WhenWritingNull |
默认 .NET 版本 | .NET Framework / .NET Core / .NET 5+ | .NET Core 3.0+ / .NET 5+ |
安装方式 | NuGet: Newtonsoft.Json | 内置 (无需安装) |
性能 | 中 | 高(启动更快、内存更省) |
AOT 支持 | 需 source generator | 原生支持 |
适用场景 | 老 .NET 项目、第三方库依赖、生态丰富 | ASP.NET Core 3.0+、高性能场景、.NET MAUI / Blazor |
本 JSON 转 C# 工具所有操作完全在你的浏览器本地完成:JSON 解析、C# 代码生成、文件下载全部通过浏览器 JavaScript + WebAssembly(quicktype-core)在客户端执行,不会通过网络向任何服务器发送 JSON 内容、上传的文件或生成的代码。文件上传使用浏览器原生 FileReader API 直接读取到内存,不经过任何中间服务。不使用 Cookie 追踪,不收集任何用户输入或使用数据。关闭或刷新页面后,所有输入和输出内容自动从内存清除。适合处理含 API 密钥、token、敏感业务数据的 JSON。