从 JSON 到 C# 类
粘贴一段 JSON 示例,即可获得可直接粘贴到 .cs 文件中的 C# POCO 类。工具会选择合适的类型,处理带有额外类定义的嵌套对象,支持可空引用类型,并根据你的项目生成 System.Text.Json 或 Newtonsoft.Json 特性。
如何将 JSON 转换为 C#
-
1
粘贴 JSON
单个示例即可满足需求;提供多个示例可提升对可空性和数组元素类型的推断。
-
2
选择风格
System.Text.Json(.NET 6+)或 Newtonsoft.Json(旧版)。对于 camelCase 的 JSON,会在 PascalCase 属性名上添加 `[JsonPropertyName]`。
-
3
选择目标 C# 版本
C# 10+ 用于记录和文件范围命名空间,C# 8 用于可空引用类型,更早的版本则用于实现最大兼容性。
-
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。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
邮箱验证器
验证邮箱地址:RFC 5322 语法检查、实时 MX 记录查询,并显示本地部分、域名和长度详情。不会发送任何邮件。
编辑器配置生成器
根据你的缩进样式与大小、行尾、字符集和空格规则生成 .editorconfig 文件,让不同集成开发环境(IDE)和编辑器的格式保持一致。
证书解码器
粘贴一张 X.509 PEM 证书,并查看解码后的字段:主体、颁发者、序列号、签名算法、有效期及主体备用名称(SAN)。
此工具还提供其他语言版本
- Từ JSON đến lớp C# [VI]
- تحويل JSON إلى فئة C# [AR]
- JSON vers classe C# [FR]
- JSON ke Kelas C# [ID]
- JSON zu C# Klasse [DE]
- JSON을 C# 클래스로 [KO]
- JSON till C#-klass [SV]
- JSON naar C#-klasse [NL]
- JSON ถึงคลาสใน C# [TH]
- JSON na klasę C# [PL]
- JSONからC#クラスへ [JA]
- JSON para Classe C# [PT]
- JSON a Clase C# [ES]
- JSON to C# Class [EN]
- JSON in classe C# [IT]
- JSON в класс C# [RU]
- JSON'ten C# Sınıfına [TR]