logo
GeekFormat

JSON 转 C#

免费在线 JSON 转 C# 工具,把 API 响应或配置 JSON 一键转成可直接在 ASP.NET Core、Unity、Blazor、.NET MAUI 项目里使用的标准 C# 类。支持 [JsonProperty] 注解、List 泛型、Nullable<T>、嵌套类自动拆分,完全本地浏览器生成。

相关推荐

关于 JSON 转 C#:把 JSON 数据变成可编译的 C# POCO 类

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 Web API:把 OpenAPI / Swagger 文档的示例 JSON 转为 DTO 类,配合 [FromBody] 模型绑定接收前端请求
  • ASP.NET Core MVC:把表单/JSON 请求体转为强类型 Model,配合 ModelState 自动验证
  • Newtonsoft.Json 反序列化:把第三方接口响应 JSON 转为带 [JsonProperty] 的 POCO 类,无需手写字段映射
  • System.Text.Json 高性能场景:把 JSON 转为 record 类型或 init-only 属性,配合 JsonSerializer.Deserialize<T> 启动更快
  • Unity 游戏脚本:把网络 API 返回的 JSON(玩家数据、关卡配置、商城道具、排行榜)转为可序列化的 ScriptableObject 数据模型
  • .NET MAUI 跨平台应用:把后端 API JSON 转为 Model 类,在 XAML 数据绑定中使用,跨 iOS / Android / Windows 共享业务模型
  • Blazor Server / WebAssembly:把 API JSON 转为强类型组件参数 / 服务端模型,配合 @inject HttpClient 消费前后端共享类型
  • Entity Framework Core:把数据库导出的 JSON 文档转为实体类,作为 EF Core 模型迁移的参考基类,配合 [Key] / [Required] 等数据注解
  • Azure Functions / AWS Lambda:把 Event Grid / SNS / API Gateway / Cosmos DB 触发事件的 JSON 转为强类型事件参数,简化无服务器函数签名
  • SignalR 实时通信:把服务器推送的 JSON 消息(聊天、通知、行情、IoT 数据)转为 C# 类型,在 Hub 方法中强类型消费
  • 微服务接口契约:把服务间 RPC(gRPC-Web / HTTP / WCF)的 JSON 请求/响应示例转成 C# 类,作为多团队共享的契约定义
  • 配置文件加载:把 appsettings.json 子结构转为 Options 模式类(如 MyOptions : IOptions<MyOptions> 配合 IConfiguration.Bind)
  • 测试数据准备:把 JSON fixture 转成 C# 类后用 Newtonsoft / System.Text.Json 反序列化做单元测试驱动,配合 xUnit / NUnit / MSTest
  • 爬虫数据解析:把 HtmlAgilityPack / AngleSharp / PuppeteerSharp 抓取的 JSON 数据转成 C# 类,避免用 JObject 动态访问导致的字段遗漏
  • API 文档编写:在 Swagger / OpenAPI 文档、ReDoc、Knife4j、Swagger UI 中嵌入 C# 类示例作为 schema 定义,提升文档可读性
  • 代码评审协作:把 API 响应 JSON 直接转成可读的 POCO,Code Review 时便于讨论字段命名、类型选择和注解使用
  • 老项目重构:把基于 JObject / Dictionary<string, object> 的动态访问重构为基于 POCO 的强类型访问,提升编译期类型检查和可维护性
  • 教学与培训:C# 课程、.NET 入门教学中把示例 JSON 转 POCO 演示面向对象建模、属性访问器和序列化原理

使用方法

  1. 在左侧编辑器粘贴 JSON 内容,或点击上传按钮选择 .json / .txt 文件,或点击示例按钮加载内置数据
  2. 等待 400ms 自动转换,右侧即可看到生成的 C# POCO class 代码
  3. 如果 JSON 格式错误,点击「修复 JSON」按钮自动修复常见语法问题后再转换
  4. 点击「复制」按钮把单个类复制到剪贴板,粘贴到 Visual Studio / Rider / VS Code,或点击「下载」保存为 .cs 文件

功能特点

  • 纯浏览器本地生成:JSON 解析与 C# 代码生成全部在浏览器内通过 JavaScript + quicktype-core 完成,输入数据不上传任何服务器
  • POCO + record 双形态:默认生成可序列化的 POCO class,可一键切换为 C# 9+ 的 record 类型,匹配现代 .NET 编码风格
  • Newtonsoft [JsonProperty] 注解:每个字段自动生成 [JsonProperty("原始 key")],兼容 Newtonsoft.Json 默认行为,PascalCase 字段名不影响反序列化
  • 嵌套对象自动拆分:JSON 嵌套对象递归生成为独立 C# 类,按字段名首字母大写命名(如 address → Address),避免类型重复
  • List 泛型自动展开:JSON 数组自动转换为 List<T>,T 按数组首项自动推断(["a","b"] → List<string>,[{...}] → List<Item>)
  • Nullable<T> 自动推断:JSON null 值字段自动标记为 Nullable<T>(如 long? / string? / bool?),编译期即可避免空引用异常
  • PascalCase 字段命名:snake_case 输入自动转为 PascalCase(如 user_name → UserName),同时 [JsonProperty] 注解保留原始 key 兼容反序列化
  • 多种值类型映射:string → string、integer → long、float → double、bool → bool、array → List<T>、null → Nullable<T>
  • 完整 .cs 模板:生成包含 using System.Collections.Generic; + namespace + public class + 字段 + 属性的标准 C# 文件,可直接编译
  • 复制与下载:一键复制单个类到剪贴板,或下载为 .cs 文件直接拖入 Visual Studio / Rider / VS Code
  • JSON 错误一键修复:自动修复尾随逗号、单引号、缺引号等常见格式错误,修复成功后继续生成 C# 代码
  • 本地历史记录:基于 localStorage 自动保存最近输入,刷新或误关页面后可快速恢复继续编辑

代码示例

C#:用 Newtonsoft.Json 反序列化本工具生成的 POCO

csharp

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;
    }
}

C#:ASP.NET Core Controller 使用本工具生成的 POCO 接收请求

csharp

把本工具生成的 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" />
 */

C#:用 HttpClient.GetFromJsonAsync + System.Text.Json 反序列化

csharp

.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 转成 C# 类?

把 JSON 内容粘贴到左侧输入框,工具会在 400ms 内通过 quicktype-core 自动调用生成 C# 类,右侧显示完整代码。也可以点击「上传」按钮选择 .json / .txt 文件,或点击「示例」加载内置数据。生成后可点击「复制」按钮把单个类复制到剪贴板,或下载为 .cs 文件。

生成的 C# 代码包含 [JsonProperty] 注解吗?

包含。工具默认使用 Newtonsoft.Json 兼容模式,为每个字段自动添加 [JsonProperty("原始 key")] 特性。这样即使字段名被转为 PascalCase,反序列化时仍能按原始 JSON key 正确映射。如果你使用 System.Text.Json,可在生成后把 [JsonProperty] 改为 [JsonPropertyName](语义相同),或者直接使用 System.Text.Json 默认的命名策略([JsonPropertyName] 在 System.Text.Json 里也可通过自定义 JsonNamingPolicy 处理)。

支持生成 POCO class 还是 record 类型?

默认生成可序列化的 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 数据结构?

支持所有合法 JSON 结构:基本类型(null、boolean、number、string)、数组(一维或多维)、嵌套对象(任意深度)。根输入可以是 JSON 对象或 JSON 数组,JSON 对象会生成 public class Root,JSON 数组会生成 public class Root : List<Item>。不支持 JavaScript 特有值(函数、Symbol、undefined、Date 对象等)。

JSON 字段类型如何映射到 C# 类型?

字符串 → string,整数 → long,浮点数 → double,布尔值 → bool,数组 → List<T>,嵌套对象 → 独立 class,null 值字段 → Nullable<T>(如 long? / bool? / string?)。具体映射规则详见页面下方的「JSON 类型到 C# 类型映射速查表」。

null 字段会自动生成 Nullable<T> 吗?

会。工具会检测 JSON 中显式为 null 或缺失的字段,自动把它们生成为 Nullable<T> 形式(如 long? Id { get; set; })。这与 C# 8+ 引入的 Nullable Reference Types(NRT)特性一致,能让编译器在静态分析时帮你发现空引用风险。注意:如果你启用了 NRT,引用类型默认是非空的,需要显式写 string? 才能表示可空。

数组会转成 List<T> 吗?

会。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)。

生成的代码可以直接放到 .NET 项目里用吗?

可以直接使用。生成的文件是标准 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 合法性,错误时会在右侧显示红色错误提示,并提供「修复 JSON」按钮。点击后可自动修复常见错误:末尾多余逗号、单引号替换为双引号、缺失引号的 key 补全引号、注释移除等。修复成功后会继续生成 C# 代码。

Newtonsoft.Json 和 System.Text.Json 哪个更好?

两者都是 .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 转 Java、JSON 转 Rust 有什么区别?

三者都是把 JSON 转成目标语言的类型定义,但输出形态不同:JSON 转 C# 生成带 [JsonProperty] 注解的 POCO class,配合 Newtonsoft.Json 或 System.Text.Json 可直接反序列化;JSON 转 Java 生成带 Lombok/Gson/Jackson 注解的 POJO;JSON 转 Rust 生成带 Serde derive 的 struct。三者侧重的生态系统不同,选择取决于你的技术栈。

生成带 DateTime 字段的类反序列化失败怎么办?

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,可在生成后的代码顶部手动添加 namespace YourApp.Models; 并把类放在对应 .cs 文件中。在 .NET 项目中建议按功能模块组织 namespace(如 Models / Dtos / ViewModels / Entities)。

可以在 Visual Studio 中一键粘贴为类吗?

Visual Studio 2019+ 内置「Paste Special → Paste JSON as Classes」功能(编辑菜单 → 选择性粘贴),可以把 JSON 直接转成 C# 类。本工具生成的代码与该功能兼容:把工具生成的 C# 代码复制到剪贴板后,可粘贴到任意 .cs 文件中使用。如果你更喜欢 VS 内置功能,可直接使用 Edit → Paste Special → Paste JSON as Classes 而无需打开本工具。

故障排查

提示「请输入 JSON 数据」或右侧为空

左侧输入框为空或只有空白字符。确保已粘贴有效的 JSON 内容,或点击上传按钮选择 .json / .txt 文件,也可以点击示例按钮加载内置样例。

提示 JSON 解析失败

常见原因:末尾有多余逗号(如 {"a":1,})、使用了单引号而非双引号、key 未加双引号、包含 JavaScript 注释。点击「修复 JSON」按钮可自动修复部分错误;如果仍失败,请先用 JSON 格式化工具校验。

生成的字段类型不够精确

工具按 JSON 样本推断类型,例如所有整数都是 long、所有字符串都是 string。如果你需要 int / decimal / Guid / DateTime 等更精确类型,请在生成后手动修改字段类型。注意 System.Text.Json 默认不支持 DateTime,需要用 [JsonConverter] 自定义。

null 字段生成了 Nullable<T>,但项目未启用 Nullable Reference Types

工具默认按 C# 8+ 的 Nullable Reference Types 形式生成(如 string? / List<User>?)。如果你的项目是老版本 .NET Framework / 未启用 NRT,所有引用类型默认为可空,string? 中的 ? 可直接删除(或在 .csproj 中启用 <Nullable>enable</Nullable>)。

编译时提示缺少 Newtonsoft.Json 依赖

在 .csproj 中添加以下 PackageReference: <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> 然后执行 dotnet restore,NuGet 会自动下载。如果使用 System.Text.Json 则无需安装(.NET 内置)。

snake_case JSON 字段与 PascalCase 字段命名不一致

工具会把 JSON 字段名自动转为 PascalCase(如 user_name → UserName),同时在 [JsonProperty] 注解里保留原始 key。Newtonsoft.Json 反序列化时会按 [JsonProperty] 映射,无需手动处理。如果使用 System.Text.Json 默认命名策略,需要把 [JsonProperty] 改为 [JsonPropertyName],或在 Program.cs 中配置 CamelCase 命名策略。

下载的 .cs 文件在项目中编译报错

可能原因:① 未在 .csproj 添加 Newtonsoft.Json / System.Text.Json 依赖;② 类放在了不规范的目录(应放在 .NET 项目的根目录或子目录,且对应 namespace);③ 类名与项目中其他类型冲突。解决:添加依赖、调整目录和 namespace、重命名冲突的类。

ASP.NET Core 接收 JSON 时报「Cannot deserialize」

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>

通常是数组为空 [] 时默认推断为 List<object>。可在源 JSON 中至少添加一个示例元素(如 [1,2,3]),工具会按首个元素推断类型;或生成后手动把 List<object> 改为 List<long> / List<int>。

超大 JSON 转换时页面卡顿

建议把 JSON 拆成多个独立模块分别转换,或只提取需要建模的部分。浏览器渲染大量嵌套类时会消耗较多内存,超过 5MB 的 JSON 推荐使用 NSwag / Visual Studio 内置的「Paste JSON as Classes」功能处理。

术语表

POCO (Plain Old CLR Object)
C# / .NET 中「普通 CLR 对象」的简称,约束为:公有默认构造器 + 私有字段 + 公有 { get; set; } 属性 + 无框架依赖。本工具生成的即是标准 POCO。
record
C# 9+ 引入的不可变数据载体类型,使用值相等性而非引用相等性。本工具生成后可手动改为 record,适合 DTO、API 响应模型、不可变配置等场景。
[JsonProperty]
Newtonsoft.Json 的字段映射特性,本工具默认会为每个字段添加 [JsonProperty("原始 key")],保证 PascalCase 字段名能正确反序列化 snake_case JSON。
Newtonsoft.Json
又称 Json.NET,.NET 生态最流行的 JSON 库,生态最丰富、兼容性最好,几乎所有 .NET 项目都支持。ASP.NET Core 3.0 之前默认使用,3.0 后改为 System.Text.Json 但仍可通过 NuGet 包兼容。
System.Text.Json
.NET Core 3.0+ 内置的高性能 JSON 库,启动更快、内存更省、AOT 友好。特性包括 [JsonPropertyName](对应 Newtonsoft 的 [JsonProperty])和 JsonNamingPolicy 自定义命名策略。
Nullable<T>
C# 中表示值类型可为空的形式(如 long? / bool?)。本工具把 JSON null 字段自动推断为 Nullable<T>,编译期即可避免空引用异常。
List<T>
.NET 集合框架的泛型列表类型,本工具把 JSON 数组自动转换为 List<T>,T 按数组首项自动推断(如 ["a"] → List<string>)。
namespace
C# 中用于组织类的命名空间关键字,类似 Java 的 package。本工具生成的代码默认无 namespace,可手动添加(如 namespace MyApp.Models)。
ASP.NET Core
微软开源的跨平台 Web 框架,本工具生成的 POCO 类可直接用于 ASP.NET Core 的 Controller [FromBody] 模型绑定、Minimal API、Blazor 组件参数等场景。
Unity
全球最流行的游戏引擎,使用 C# 作为脚本语言。本工具生成的 POCO 类可用于 Unity 网络 API 响应解析、ScriptableObject 配置数据建模。
Snake_case → PascalCase
字段命名策略转换,snake_case 命名(如 user_name、created_at)转为 PascalCase 命名(如 UserName、CreatedAt),符合 .NET 官方命名规范。
quicktype-core
本工具底层依赖的开源多语言 JSON 类型生成库(quicktype 项目),支持 C#、Java、TypeScript、Rust、Go、Swift 等十余种语言,基于 TypeScript + WebAssembly 在浏览器中执行。
.NET MAUI
微软跨平台 UI 框架(.NET Multi-platform App UI),C# 代码可在 iOS / Android / Windows / macOS 共享。本工具生成的 POCO 适合作为 MAUI XAML 数据绑定的 Model。
Blazor
微软基于 WebAssembly 的 SPA 框架,分 Server 和 WebAssembly 两种模式。本工具生成的 C# 类可用于 Blazor 组件参数、强类型 API 响应模型,提升单语言全栈开发效率。
HttpClient.GetFromJsonAsync
.NET 5+ / System.Net.Http.Json 扩展方法,一行完成 HTTP GET + JSON 反序列化。配合本工具生成的 POCO 可极大简化 HTTP API 客户端代码。
JsonNamingPolicy
System.Text.Json 中用于控制 JSON 字段名与 C# 属性名映射策略的类(如 CamelCase、SnakeCaseLower)。Newtonsoft.Json 通过 [JsonProperty] 注解或 ContractResolver 实现。
IOptions<T>
.NET Options 模式核心接口,把 appsettings.json 子结构绑定到强类型类上。本工具生成的 POCO 可直接作为 IOptions<T> 的实现,配合 IConfiguration.Bind 使用。

JSON 类型到 C# 类型映射速查表

工具根据 JSON 值的类型自动推断对应的 C# / .NET 类型:

JSON 值示例生成 C# 类型Nullable 形式说明
null根据上下文推断T?null 值字段自动推断为 Nullable<T>(如 long? / bool? / string?)
true / falseboolbool?JSON 布尔值直接映射为 C# bool
42longlong?JSON 整数默认映射为 long(64 位整数,兼容大数)
3.14doubledouble?JSON 浮点数默认映射为 double(双精度浮点数)
"hello"stringstring?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 兜底,生成后建议改为具体类型
{...} 嵌套对象独立 classClassName?嵌套对象生成独立 class,字段名首字母大写命名(address → Address)

Newtonsoft.Json 与 System.Text.Json 注解对比表

.NET 生态两大主流 JSON 库的字段映射特性对比,本工具默认生成 Newtonsoft 兼容的 [JsonProperty]:

对比项Newtonsoft.JsonSystem.Text.Json
字段映射特性[JsonProperty("user_name")][JsonPropertyName("user_name")]
默认命名策略保持 PascalCase 字段名(需 [JsonProperty] 兼容 snake_case)保持原字段名(按 JSON key 匹配,CamelCase 默认)
自定义命名[JsonProperty] 逐字段指定[JsonPropertyName] + JsonNamingPolicy 全局配置
空值处理NullValueHandling.Ignore / IncludeJsonIgnoreCondition.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

Privacy & Security

本 JSON 转 C# 工具所有操作完全在你的浏览器本地完成:JSON 解析、C# 代码生成、文件下载全部通过浏览器 JavaScript + WebAssembly(quicktype-core)在客户端执行,不会通过网络向任何服务器发送 JSON 内容、上传的文件或生成的代码。文件上传使用浏览器原生 FileReader API 直接读取到内存,不经过任何中间服务。不使用 Cookie 追踪,不收集任何用户输入或使用数据。关闭或刷新页面后,所有输入和输出内容自动从内存清除。适合处理含 API 密钥、token、敏感业务数据的 JSON。

Authoritative References