跳到主内容
UniKit

JSON 转 C# 类

JSON 自动生成 C# 数据类

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

选项
生成的 C# 代码
#nullable enable

using System.Collections.Generic;

namespace JsonModels
{
    public class RootOwner
    {
        public string Name { get; set; }
        public object Email { get; set; }
    }

    public class RootItems
    {
        public string Sku { get; set; }
        public double Price { get; set; }
        public string? Note { get; set; }
    }

    public class Root
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool IsActive { get; set; }
        public double Score { get; set; }
        public RootOwner Owner { get; set; }
        public List<string> Tags { get; set; }
        public List<RootItems> Items { get; set; }
        public object Meta { get; set; }
    }
}

结果摘要: 类型数 3 · 字段数 13 · 命名冲突 0

这个工具能做什么

  • 对接 .NET 后端或写 Unity 脚本时,把接口返回的 JSON 直接生成 C# 数据类,省去手写 POCO 的功夫。
  • 统一命名风格:字段可以按 PascalCase、camelCase、snake_case 或 kebab-case 输出,C# 保留字会自动加下划线避开。
  • 保留原始键名:勾选 [JsonPropertyName] 注解后,序列化时会用 JSON 里的原始键名,属性名仍符合 C# 规范。
  • 处理可空与异构数据:null 字段会生成可空类型,数组推断成 List<T>,异构数组退化成 object。

示例

输入

根类名 Root,命名空间 JsonModels,字段命名 PascalCase,JSON 为 {"id":1,"name":"UniKit","is_active":true,"owner":{"name":"Ada","email":null}}

输出

#nullable enable

namespace JsonModels
{
    public class RootOwner
    {
        public string Name { get; set; }
        public object Email { get; set; }
    }

    public class Root
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool IsActive { get; set; }
        public RootOwner Owner { get; set; }
    }
}

共 2 个类、6 个字段。email 为 null 所以推断成 object,需要更精确的类型时手工改成 string?。勾选 [JsonPropertyName] 后每个属性上方会多一行 [JsonPropertyName("is_active")] 之类的注解,并自动 using System.Text.Json.Serialization。

常见问题

和 JSON 转代码工具里的 C# 有什么区别?

这一版是 C# 专用:多了命名空间、四种字段命名约定、[JsonPropertyName] 注解开关、C# 保留字转义(关键字加下划线)以及命名冲突提示。需要其它语言(TypeScript、Java、Go 等)时用 JSON 转代码工具。

为什么 null 字段生成的是 object?

因为样例里那个字段的值是 null,工具无法知道它的真实类型,只能用最宽松的 object 兜底。修法很简单:把样例里的 null 换成一个有代表性的值(例如 "ada@example.com")再生成,或者生成后手工改成 string?。

可空引用类型和 #nullable enable 是什么?

生成文件开头会写上 #nullable enable,表示启用可空引用类型上下文。于是缺失的字段会带 ?,例如 public string? Note { get; set; },配合 C# 8 及以上版本能在编译期提示可能的空引用,比运行时 NullReferenceException 友好得多。

字段命名冲突怎么办?

两个不同的 JSON 键转成同一种命名风格后可能撞名(例如 is_active 与 isActive),工具会自动给后面的字段加数字后缀,并在结果摘要里列出「命名冲突:原键 → 最终字段名」,方便你决定是否保留。

根节点是数组可以吗?

可以,但要求是「对象数组」:会以数组元素为模板生成一个类,并额外包一层 List<T>。如果数组里混了标量或不同类型,会提示根节点必须是 JSON 对象或对象数组。解析与生成都在本地完成,不会上传。

关键词:jsonc#csharppocosystem.text.jsonjsonpropertynameJSON 转 C#数据类可空引用类型代码生成

同类工具