如何在Visual Studio 2022中从JSON生成C# Record Type类?
离线生成JSON对应的C# Record Type方案
方案一:自定义Visual Studio选择性粘贴模板
Visual Studio自带的「选择性粘贴」生成类的模板可以修改,改成直接输出record类型:
- 找到VS代码模板目录,VS2022的路径一般是
%USERPROFILE%\Documents\Visual Studio 2022\Code Templates\CSharp\Code\1033(其他版本路径类似,按需调整) - 找到「Paste JSON as Classes」相关的模板文件,打开后把所有
class关键字替换成record,同时把类内的自动属性调整成record的简洁写法(比如把public string Name { get; set; }改成构造器参数形式) - 保存模板后重启Visual Studio,再用选择性粘贴功能就能直接生成record类型了
方案二:自己写个轻量代码生成工具
用C#写个简单的控制台程序,离线处理JSON生成record:
- 用
System.Text.Json或Newtonsoft.Json解析JSON结构,遍历节点获取属性名和类型 - 拼接C#代码字符串,按照record语法生成代码,示例如下:
// 生成的嵌套record示例 public record Product( int Id, string Name, decimal Price, Category ProductCategory ); public record Category( int Id, string CategoryName ); - 这种方式完全离线,还能自定义规则,比如给属性加上
[JsonPropertyName]特性、处理可空类型等
方案三:使用dotnet CLI离线工具
可以用现成的dotnet CLI工具,或者自己封装一个:
- 安装工具后,直接在命令行传入JSON文件路径,就能生成对应的record代码
- 核心逻辑是解析JSON Schema,然后按照record的语法输出代码,全程离线运行
方案四:快速将现有类转为record
如果已经用VS生成了普通类,快速转成record的小技巧:
- 把
class关键字替换成record - 将类内的自动属性移到record的构造器参数中(这是record的简洁写法),比如:
原类:
转成record:public class Order { public string OrderNumber { get; set; } public DateTime OrderDate { get; set; } }public record Order(string OrderNumber, DateTime OrderDate); - 如果需要保留属性的
init访问器或者特性,也可以写成扩展形式:public record Order { [JsonPropertyName("order_num")] public string OrderNumber { get; init; } public DateTime OrderDate { get; init; } }
内容的提问来源于stack exchange,提问作者biele27
相关产品推荐
相关产品推荐

