JSON 转 C# 类
把 JSON 转成 C# 类或 record:支持 List<T>、可空类型、DateTime 和 Guid 识别,以及 System.Text.Json 或 Newtonsoft 特性。
因为所有样本都是 null,或各样本的值类型不一致,所以使用了 object — 知道真实类型后请替换它。
写成 10.0 的数字会被当作整数读取,所以样本全是这种写法的字段会变成 int — 若要得到 double,请加入一个带小数的样本。
粘贴一段 JSON 响应,就能得到可用于反序列化的 C# 模型类。嵌套对象会各自成为一个类,数组会变成 List<T>;当数组中有多个对象时,它们的字段会被合并,因此某些项缺失或有时为 null 的字段会变成可空类型(int?、string?)。带有准确 JSON 名称的特性,可以让 camelCase 或 snake_case 的键映射到 PascalCase 属性。JSON 不会离开你的浏览器。
使用方法
- 粘贴一份有代表性的 JSON 示例——含多项的数组能得出最准确的类型。
- 设置根类名,需要的话再填写命名空间。
- 选择生成类还是位置 record,以及使用 System.Text.Json、Newtonsoft 还是不加特性。
- 决定是否启用可空引用类型,以及是否识别 DateTime/Guid。
- 把代码复制到 .cs 文件中。
计算公式
整数 → int(超出 ±2,147,483,647 则为 long) · 小数 → double · true/false → bool · 文本 → string · ISO 日期 → DateTime · UUID → Guid · [ … ] → List<T> · { … } → 类
在同一位置看到的值会被合并:int 和 double 合并为 double,类型混杂则为 object。在某些样本中为 null 或在某些数组项中缺失的成员是可空的:值类型始终加 ?,引用类型在启用可空引用类型时加 ?。结构相同的对象共用一个类;列表项的类名取自键的单数形式(orders → Order)。
示例
示例用户会生成三个类。Root 包含 int Id、string Name、string Email、bool IsActive、double Balance、DateTime CreatedAt、List<string> Tags、Address Address、List<Order> Orders,以及在示例中为 null 的 object? Manager。Order 包含 string OrderId(来自 order_id)、double Total(59.9 和 12 合并为 double)、int Items 和 string? Coupon——优惠券只出现在第二个订单里,所以是可空的。
常见问题
该用 System.Text.Json 还是 Newtonsoft?
新的 .NET 项目使用内置的 System.Text.Json,其特性是 [JsonPropertyName("…")]。如果项目已经在用 Json.NET,就选 Newtonsoft,其特性是 [JsonProperty("…")]。加上特性后,C# 名称可以遵循 PascalCase,而 JSON 保持自己的写法。
为什么编译器警告不可空属性未初始化?
启用可空引用类型后,对于从未在构造函数中赋值的 string 或类属性,会出现警告 CS8618。可以加上 required(C# 11)、给它们一个默认值,或者在 API 可能省略时把它们改为可空。
什么时候该用 record?
用于只读的数据:位置 record 简洁且不可变,两种序列化器都会通过构造函数为其赋值。
为什么某个字段的类型是 object?
因为所有样本都是 null,或样本中混有数字和文本等不同类型。请使用含真实值的样本,或手动修改类型。
资料来源
最后更新:
包含这些输入的页面地址: https://kakao.mobile/zh/tools/json-to-c-class-tool/
引用此工具
kakaoCalc. (2026, November 8). JSON 转 C# 类. https://kakao.mobile/zh/tools/json-to-c-class-tool/
“JSON 转 C# 类.” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/json-to-c-class-tool/.