如何高效批量从JSON Schema生成VB类?求类似wsdl.exe的通用方案
从JSON Schema批量生成VB类的解决方案
当然有办法实现批量从JSON Schema生成VB类,完全不用依赖Visual Studio里的“选择性粘贴”功能——毕竟你有15个Schema文件,确实需要一套通用的批量处理方案。而且你提到VS的功能生成了不符合预期的代码,那是因为它是针对JSON实例而非JSON Schema设计的,专门的Schema工具才能生成你真正需要的数据类。
下面给你两种实用的方案:
方案一:使用命令行工具批量处理
有不少现成的命令行工具支持从JSON Schema生成VB代码,比如JsonSchemaToCSharp(没错,它也支持VB输出)。你可以用它批量遍历你的Schema文件,自动生成对应类:
- 先获取工具的命令行版本(可通过NuGet或GitHub下载)
- 写一个简单的批处理脚本(比如
GenerateVbClasses.bat)来批量处理:
运行这个脚本就能一次性处理所有15个Schema文件。@echo off set "schemaDir=你的Schema文件所在文件夹路径" set "outputDir=生成的VB类保存路径" set "toolPath=JsonSchemaToCSharp.exe的路径" for %%f in ("%schemaDir%\*.json") do ( "%toolPath%" -i "%%f" -o "%outputDir%\%%~nf.vb" -l VB )
方案二:用NJsonSchema自定义生成逻辑(更灵活)
如果需要自定义类名、命名空间、属性规则等,推荐用NJsonSchema这个.NET库写个小控制台程序,完全可控:
先通过NuGet安装NJsonSchema和NJsonSchema.CodeGeneration.VB两个包,然后写一段VB代码:
Imports NJsonSchema Imports NJsonSchema.CodeGeneration.VB Imports System.IO Module SchemaToVbGenerator Async Sub Main() ' 配置路径 Dim schemaDirectory = "你的Schema文件夹路径" Dim outputDirectory = "生成类的输出文件夹" Dim targetNamespace = "YourApp.Models" ' 自定义命名空间 ' 遍历所有JSON Schema文件 For Each schemaPath In Directory.GetFiles(schemaDirectory, "*.json") ' 加载Schema文件 Dim schema = Await JsonSchema.FromFileAsync(schemaPath) ' 配置生成器:用Schema的title作为类名,添加必填特性 Dim generatorSettings = New VbGeneratorSettings With { .Namespace = targetNamespace, .ClassName = If(String.IsNullOrEmpty(schema.Title), Path.GetFileNameWithoutExtension(schemaPath), schema.Title), .GenerateDataAnnotations = True ' 生成[Required]特性对应Schema的required字段 } Dim generator = New VbCodeGenerator(schema, generatorSettings) Dim vbClassCode = generator.GenerateFile() ' 保存生成的代码文件 Dim outputPath = Path.Combine(outputDirectory, $"{Path.GetFileNameWithoutExtension(schemaPath)}.vb") File.WriteAllText(outputPath, vbClassCode) Next Console.WriteLine("所有类生成完成!") Console.ReadKey() End Sub End Module
用这个程序处理你提供的示例Schema,会生成符合预期的类:
Namespace YourApp.Models Public Class MyObject <Required> Public Property description As String <Required> Public Property name As String <Required> Public Property id As String End Class End Namespace
这和你之前VS生成的错误结构完全不同,真正对应了Schema描述的数据模型。
为什么VS的功能不好用?
VS的“将JSON粘贴为类”是把JSON实例的结构转成类,而你给的是JSONSchema(描述数据结构的元数据),所以它会错误地把Schema里的title、properties这些字段当成类的属性,这显然不是你要的结果。专门的Schema工具能识别Schema的语义,生成正确的数据类。
内容的提问来源于stack exchange,提问作者Wini
相关产品推荐
相关产品推荐

