JSON转C#类
从JSON生成C#类
JSON输入
C#输出
什么是JSON转C#转换?
JSON转C#转换是指从JSON数据生成强类型C#类定义的过程。当.NET应用程序从API、配置文件或消息队列接收JSON数据时,需要借助C#类将其反序列化为对象。手动编写这些类既繁琐又容易出错,尤其是当JSON包含嵌套对象、数组和混合类型时。
JSON转C#类生成器会检查JSON的结构和值,为每个字段推断合适的C#类型,并生成带有属性访问器和序列化特性的类定义。输出结果遵循.NET命名规范:属性名使用PascalCase,通过JsonPropertyName特性映射原始camelCase或snake_case JSON键,并对数组使用List'<'T'>'。
这种转换在ASP.NET Core Web API、Azure Functions以及任何使用外部JSON数据的.NET服务中极为常见。相比使用dynamic或Dictionary'<'string, object'>',强类型类能提供编译时安全性、IntelliSense支持,并防止字段名拼写错误——这类错误否则只会在运行时才暴露。将JSON粘贴到此工具,即可立即获得可直接使用的C#类。
为什么使用JSON转C#生成器?
手动根据JSON示例编写C#模型类既耗时又容易引入人为错误。生成器负责处理重复性工作,让您专注于业务逻辑。
JSON转C#使用场景
JSON与C#类型映射参考
每种JSON值类型对应一个特定的C#类型。生成器会分析实际值以选择最精确的类型。例如,没有小数点的JSON数字会转换为int,而3.14则转换为double。null值生成object?(可空引用类型),因为仅凭null无法推断实际类型。
| JSON类型 | 示例 | C#类型 |
|---|---|---|
| string | "hello" | string |
| number (int) | 42 | int |
| number (float) | 3.14 | double |
| boolean | true, false | bool |
| null | null | object? |
| object | {"key": "value"} | nested class |
| array | [1, 2, 3] | List<int> |
| array of objects | [{"id": 1}] | List<ClassName> |
System.Text.Json与Newtonsoft.Json
.NET有两个主要的JSON序列化库。此工具生成的类使用System.Text.Json特性(JsonPropertyName),这是.NET Core 3.0以来的内置选项。如果您的项目使用Newtonsoft.Json,可以替换相应特性。
代码示例
以下示例展示如何定义和使用从JSON生成的C#类,涵盖两个主要序列化库的用法,以及如何通过命令行自动化生成流程。
using System.Text.Json;
var json = """{"id": 1, "name": "Alice", "active": true}""";
var user = JsonSerializer.Deserialize<User>(json);
Console.WriteLine(user.Name); // → "Alice"
public class User
{
[JsonPropertyName("id")]
public int Id { get; set; }
[JsonPropertyName("name")]
public string Name { get; set; }
[JsonPropertyName("active")]
public bool Active { get; set; }
}using Newtonsoft.Json;
var json = @"{""id"": 1, ""name"": ""Alice"", ""scores"": [98, 85]}";
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Scores[0]); // → 98
public class User
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("scores")]
public List<int> Scores { get; set; }
}// Install: npm install -g quicktype
// Generate C# classes from JSON:
// quicktype --lang csharp --src data.json --out Models.cs
// From stdin:
// echo '{"id": 1, "name": "Alice"}' | quicktype --lang csharp
// Output:
// public class Root
// {
// [JsonPropertyName("id")]
// public int Id { get; set; }
//
// [JsonPropertyName("name")]
// public string Name { get; set; }
// }import json
def json_to_csharp(data: dict, class_name: str = "Root") -> str:
lines = [f"public class {class_name}", "{"]
type_map = {str: "string", int: "int", float: "double", bool: "bool"}
for key, value in data.items():
cs_type = type_map.get(type(value), "object")
prop = key[0].upper() + key[1:] # PascalCase
lines.append(f' [JsonPropertyName("{key}")]')
lines.append(f' public {cs_type} {prop} {{ get; set; }}')
lines.append('')
lines.append("}")
return "\n".join(lines)
data = json.loads('{"id": 1, "name": "Alice", "active": true}')
print(json_to_csharp(data))