You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效批量从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文件,自动生成对应类:

  1. 先获取工具的命令行版本(可通过NuGet或GitHub下载)
  2. 写一个简单的批处理脚本(比如GenerateVbClasses.bat)来批量处理:
    @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
    )
    
    运行这个脚本就能一次性处理所有15个Schema文件。

方案二:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:28:12