从 JSON 到 C# 类

粘贴一段 JSON 示例,即可获得可直接粘贴到 .cs 文件中的 C# POCO 类。工具会选择合适的类型,处理带有额外类定义的嵌套对象,支持可空引用类型,并根据你的项目生成 System.Text.JsonNewtonsoft.Json 特性。

如何将 JSON 转换为 C#

  1. 1

    粘贴 JSON

    单个示例即可满足需求;提供多个示例可提升对可空性和数组元素类型的推断。

  2. 2

    选择风格

    System.Text.Json(.NET 6+)或 Newtonsoft.Json(旧版)。对于 camelCase 的 JSON,会在 PascalCase 属性名上添加 `[JsonPropertyName]`。

  3. 3

    选择目标 C# 版本

    C# 10+ 用于记录和文件范围命名空间,C# 8 用于可空引用类型,更早的版本则用于实现最大兼容性。

  4. 4

    复制这些类

    一个根类加上针对每种对象形态的嵌套类,全部集中在一个文件中,可直接放入你的项目。

输出示例

对于以下输入:

{ "firstName": "Alice", "age": 30, "emails": ["a@a.com"], "address": { "city": "Madrid" } }

System.Text.Json 输出(C# 10+):

public class User
{
    [JsonPropertyName("firstName")]
    public string FirstName { get; set; } = default!;

    [JsonPropertyName("age")]
    public int Age { get; set; }

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

    [JsonPropertyName("address")]
    public Address Address { get; set; } = default!;
}

public class Address
{
    [JsonPropertyName("city")]
    public string City { get; set; } = default!;
}

类型映射

JSON C# 类型
字符串 string
整数 int(超过 int.MaxValue 时使用 long
数字(小数) double(若选择则为 decimal
布尔值 bool
null object?(或与同级字段合并)
ISO-8601 日期 DateTime(或 DateOnly
GUID 形式的字符串 Guid
字符串数组 List<string>
对象 嵌套类

特性选项

  • System.Text.Json[JsonPropertyName("foo")]),推荐用于 .NET 6+ 和新项目。
  • Newtonsoft.Json[JsonProperty("foo")]),用于旧项目,或当你需要 Newtonsoft 专有功能时。
  • ,属性名与 JSON 键完全一致(仅当 JSON 键已是 PascalCase 时才有效)。

常见错误

  • 对可能溢出的字段使用 int 如果你的 JSON 中的值超过 int.MaxValue,请使用 long。生成器在遇到较大的值时会自动提升类型。
  • 计算属性缺少 [JsonIgnore] 如果你向生成的类中添加辅助属性,请用 [JsonIgnore] 标注它们,否则它们会在序列化输出时被写出。
  • 忘记使用与区域性无关的解析。 decimal 字段应使用 CultureInfo.InvariantCulture 反序列化;System.Text.Json 默认如此,Newtonsoft 需通过全局设置实现。
  • 仅凭单个示例就信任生成器。 可空性和数组元素类型是根据生成器所看到的数据推断出来的。请务必将可空注解与你实际的 API 行为进行核对。

常见问题

对于基于 .NET 6+ 的新项目,请使用 System.Text.Json,它更快、内置于框架,并且现已支持 Newtonsoft 几乎所有功能。对于旧项目,或当你需要 Newtonsoft 的特定功能(自定义契约解析器、JObject、动态处理)时,则使用 Newtonsoft。

在 C# 10+ 中,记录(record)是不可变 DTO 的惯用写法,能提供值相等性和简洁的语法。当你需要可变性或与旧代码兼容时,类更合适。本工具允许你选择其中任意一种。

如果你的项目使用可空引用类型(C# 8+),在任一示例中被观察到为 null 的字段会变为 string?int? 等。若不使用可空引用类型,则仅对值类型标注可空性(例如 int?)。

由不同对象形状混合而成的数组无法在强类型 C# 中直接表示。本工具会推断出一个通用基类,或(作为回退)使用 object;对于混合数组,通常最好重新设计 JSON。

相关工具

此工具还提供其他语言版本