JSON 转 C#:转换差异、边界与常见坑
在线 JSON 转 C#:按 PascalCase 生成类属性并附加 JsonPropertyName 映射,可直接用于 System.Text.Json 或 Newtonsoft,省去手写实体类的时间。
把 JSON 样本转成 C# 类,属性名走 PascalCase 并由特性映射原始键名。生成结果需要人工审一遍:数字默认 double 会毁掉大整数,空数组推断出的 object[] 只是占位,可空性也要按接口实际契约调整。
两种格式的差异对照
| 维度 | JSON | C# 类型定义 |
|---|---|---|
| 类型系统 | 弱类型,运行时才知道 | 强类型,编译期校验 |
| 命名习惯 | camelCase / snake_case 混用 | PascalCase 属性,常配映射特性 |
| null 处理 | 值为 null 即可 | 值类型需 Nullable<T> 或 ? 后缀 |
| 数组 | 同类元素可混合 | 强类型集合(List<T> / T[]) |
| 数字精度 | 大整数可能被浮点化 | long / decimal 可精确保存 |
| 日期 | 字符串或时间戳 | DateTime / DateTimeOffset 明确语义 |
| 可空性 | 字段缺失与 null 不区分 | 可空引用类型语法可显式标注 |
| 运行时开销 | 解析成本低 | 反序列化有对象分配成本 |
边界条件
- JSON 里的数字统一按 double 推断时,超出 2^53 的整数会失真,应手工把该属性改成 long 或 decimal。
- 同一字段在不同对象里类型不一致(有时数字有时字符串)会导致推断失败,需要生成 object 或做联合处理。
- 键名含连字符或点号("user-name")无法直接作为标识符,必须依靠映射特性桥接。
- 空数组无法推断元素类型,会生成 object[] 或 List<object>,需要手工替换为具体类型。
常见坑
- 删掉工具生成的 JsonProperty 映射特性,导致反序列化后字段全是默认值且不报错。
- 大整数被推断成 double,订单号末位变 0,写库才发现。
- 空数组推断出 object[],编译能过但后续取值处处需要强转。
- 同一字段在不同样本里类型不同,生成的类型只符合其中一种,另一种运行时抛异常。
相关工具
- JSON 转 C# 工具从样例 JSON 自动生成 C# 类,支持 Newtonsoft.Json 与 System.Text.Json 特性,处理嵌套对象与数组类型,适合 .NET 模型层开发。嵌套对象拆成独立类,数组推断为集合类型,字段按驼峰命名。可选用两套主流序列化框架的特性写法。类名与命名空间可自定义。
- 数据格式转换器在 JSON、YAML、TOML、XML、CSV 之间一处粘贴自由互转并实时预览。在 JSON、YAML、TOML、XML 与 CSV 之间任意互转,粘贴一次即可看多种输出。转换时会提示解析失败的位置,避免带着语法错误继续处理。适合在不同工具链之间迁移配置文件。支持粘贴即转。多种格式的输出可逐一取用。
- JSON 转 YAML把 JSON 转为缩进风格的 YAML,可自定义缩进宽度,适合改写成 K8s 清单与 GitHub Actions 工作流,让配置更易编辑对比。缩进宽度可调,多行字符串会自动改用块标量,避免出现大量转义符。输出适合直接粘进工作负载清单与流水线配置文件。注释式写法需自行补充。长文本会改用块标量输出。
- Excel 转 JSON 工具把 Excel 文件(xlsx、xls、csv)转为 JSON,支持嵌套表头、工作表选择与键名映射,用 SheetJS 在浏览器完成,适合业务数据导入。支持选择工作表、指定表头行与把首行映射为字段名。嵌套表头会按层级组装为嵌套对象,数字与日期保留原始类型。可指定表头行并自定义字段名。
常见问题
怎么把 C# 再转回 JSON?
使用同工具的交换方向功能,或本站对应的「C# 转 JSON」页面,两者都本地运行、数据不上传,可完成往返转换与校验。
JSON 和 C# 哪个更适合人类阅读?
这取决于场景:C# 通常更偏向程序解析与接口传输式的可读形态,而 JSON 更利于程序解析与接口传输式的程序消费;需要人工编辑时优先选可读性更高的那一侧。
生成的是 class 还是 record?
默认多是 public class + 属性(get/set),兼容性最好。C# 9+ 的 record 更适合不可变数据(值相等、with 表达式),但不是所有序列化器与老框架都同等支持。需要 record 时在生成结果上手动改,或选支持该选项的工具。
字段名大小写和 JSON 不一致怎么办?
C# 属性惯例是 PascalCase,而 JSON 常见 camelCase 或 snake_case。工具通常会同时生成属性与映射特性([JsonPropertyName("user_name")]),保留原始键名。不要手工删掉这些特性——删了序列化就找不到字段,表现为"解析成功但所有字段都是默认值"。