JSON 转 C# 类

从 JSON 生成 C# 类:PascalCase 属性、[JsonPropertyName] 特性、可为 null 的引用类型和 List<T> 集合。免费且私密。

使用 System.Text.Json 特性和可空引用类型(string?、long?)。

完全在浏览器中运行,您的数据不会被上传。

相关工具

查看全部

什么是 JSON 转 C#?

将 JSON 示例转换为适用于 System.Text.Json 的 C# 类。每个属性都是 PascalCase,带有保留原始键名的 [JsonPropertyName("…")] 特性,并在示例包含 null 或缺失值的地方使用可为 null 的类型。

如何使用 JSON 转 C#

  1. 将 JSON 示例粘贴到 JSON 输入中(或点击加载示例/打开文件)。
  2. 设置根类型名称(默认为 Root)。
  3. 复制生成的 C# 代码,或下载为文件。

示例

输入
{"id":1,"name":"A","tags":["x"]}
输出
using System.Collections.Generic;
using System.Text.Json.Serialization;

public class Root
{
    [JsonPropertyName("id")]
    public long Id { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; } = string.Empty;

    [JsonPropertyName("tags")]
    public List<string> Tags { get; set; } = new();
}

何时使用 JSON 转 C#

适用于 .NET HTTP 客户端、ASP.NET 模型或测试数据。若使用 Newtonsoft.Json,请把特性换成 [JsonProperty];对于金额类数值,可考虑把 double 改为 decimal。

JSON 转 C# 的工作原理

程序会递归遍历示例,每个位置都会收集见到过的类型。对象数组会合并为一个类型:在部分元素中缺失的键变为可选,在某处为 null 的键变为可空,整数与小数混合会变为浮点类型,其他混合了多种类型的情况则回退为动态类型。嵌套对象成为各自命名的类型(键名的 PascalCase,数组键取单数:orders → Order),名称冲突时添加数字后缀。C# 输出将整数映射为 long,小数映射为 double,字符串映射为 string,布尔值映射为 bool,数组映射为 List<T>,嵌套对象映射为各自的类,动态值映射为 object?。可空或可选的值带有 ?;不可为 null 的字符串初始化为 string.Empty,列表或对象初始化为 new(),这样在启用可为 null 的引用类型时代码也能干净地编译。

常见用例

  • 用 HttpClient 和 System.Text.Json 反序列化 API 响应
  • 为 ASP.NET 控制器创建请求/响应模型
  • 为 JSON 配置节建立模型
  • 为 Azure Function 触发器生成类

常见问题

为什么每个属性都有注解?

该特性即使在 C# 名称不同的情况下也能保留准确的 JSON 键,因此无论命名策略如何,序列化都能往返一致。

为什么用 double 而不是 decimal?

JSON 没有 decimal 类型;double 与解析器产生的结果一致。金额数值请使用 decimal。

能配合 Newtonsoft.Json 使用吗?

可以,把 [JsonPropertyName] 换成 [JsonProperty] 并修改 using 指令即可。

探索更多分类