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

求助:使用NJsonSchema生成独立C#类文件时每个文件包含所有类

问题解决:用NJsonSchema为每个JSON模型生成独立C#类文件

问题分析

你当前的代码生成每个类文件时都会包含所有模型,核心原因有两个:

  1. GenerateFile(rootName)方法默认会把当前类型及其所有依赖类型都输出到同一个文件
  2. 原JSON是包含两个模型的顶层对象,JsonSchema.FromSampleJson(json)会自动生成一个包含这两个模型的根类(比如示例里的User2)

解决方案

步骤1:清理Schema,移除多余根类

先过滤掉自动生成的无效根定义,只保留我们需要的User和LoginResponse。

步骤2:为每个模型单独生成类文件

针对每个目标定义创建独立的生成上下文,确保每个文件只包含对应类。修改后的代码如下:

public void GenerateClass()
{
    string json = File.ReadAllText("json.json");
    var rootSchema = JsonSchema.FromSampleJson(json);
    
    // 过滤出需要生成的目标模型定义,排除自动生成的根类
    var targetDefinitions = rootSchema.Definitions
        .Where(kv => kv.Key is "User" or "LoginResponse")
        .ToList();

    foreach (var entity in targetDefinitions)
    {
        // 创建仅包含当前模型的独立Schema
        var singleSchema = new JsonSchema();
        singleSchema.Definitions.Add(entity.Key, entity.Value);
        
        // 配置生成器,禁用依赖类自动生成
        var generator = new CSharpGenerator(singleSchema, new CSharpGeneratorSettings
        {
            ClassStyle = CSharpClassStyle.Poco,
            GenerateDependencyClasses = false
        });
        
        // 仅生成当前模型的代码
        var classCode = generator.GenerateType(entity.Key);
        
        // 补全命名空间和自动生成注释,保持格式一致
        var fullCode = $@"//----------------------
// <auto-generated>
//     Generated using the NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0)
// </auto-generated>
//----------------------

namespace MyNamespace
{{
    #pragma warning disable // Disable all warnings
    {classCode}
}}";
        
        File.WriteAllText($"{entity.Key}.cs", fullCode);
    }
}

代码说明

  • GenerateDependencyClasses = false:关闭依赖类自动生成到当前文件的逻辑
  • GenerateType(entity.Key):只生成指定模型的代码,而非包含所有依赖的完整文件
  • 手动补充命名空间和注释,保证生成代码的格式与原逻辑一致

最终效果

修改后生成的User.cs仅包含User类,LoginResponse.cs仅包含LoginResponse类,不再出现多余的User2类和其他模型代码。

内容的提问来源于stack exchange,提问作者Mousa Ghajar Najafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:35:11