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

如何在C#中用NJsonSchema/Manatee.Json验证JSON与JSON Schema

用NJsonSchema验证REST响应与JSON Schema一致性的实现方案

我之前在契约测试场景里也碰到过类似的问题,下面给你一个完整可运行的实现示例,帮你搞定这个验证需求。

1. 准备工作:安装NJsonSchema包

首先确保你的项目里安装了NJsonSchema的NuGet包,可以通过.NET CLI或者Package Manager控制台完成安装:

# .NET CLI安装命令
dotnet add package NJsonSchema

2. 核心实现步骤

步骤1:修正JSON Schema格式

注意:JSON规范要求使用双引号,先把你提供的Schema转换成标准JSON格式(同时把required字段统一移到根节点,更符合JSON Schema规范):

{
  "type": "object",
  "properties": {
    "remaining": { "type": "integer" },
    "shuffled": { "type": "boolean" },
    "success": { "type": "boolean" },
    "deck_id": { "type": "string" }
  },
  "required": ["remaining", "shuffled", "success", "deck_id"]
}

你可以把这段内容保存为本地文件(比如deck.schema.json),或者直接用字符串形式加载。

步骤2:编写完整验证代码

下面是C#的完整示例,包含从REST接口获取响应、加载Schema、执行验证的全流程:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using NJsonSchema;
using NJsonSchema.Validation;

namespace ContractTestingDemo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            try
            {
                // 1. 加载本地JSON Schema文件(也可以直接用字符串加载)
                var schemaPath = @"C:\YourProject\deck.schema.json"; // 替换成你的Schema文件路径
                var schema = await JsonSchema.FromFileAsync(schemaPath);

                // 2. 从REST端点获取待验证的JSON响应
                using var httpClient = new HttpClient();
                var apiResponse = await httpClient.GetStringAsync("https://your-api-endpoint.com/deck"); // 替换成你的实际API地址

                // 如果你想直接测试示例JSON,可以替换成下面这行
                // var apiResponse = @"{""remaining"": 52, ""shuffled"": true, ""success"": true, ""deck_id"": ""b5wr0nr5rvk4""}";

                // 3. 执行Schema验证
                var validationErrors = schema.Validate(apiResponse);

                // 4. 处理验证结果
                if (validationErrors.Count == 0)
                {
                    Console.WriteLine("✅ JSON响应与Schema完全匹配,验证通过!");
                }
                else
                {
                    Console.WriteLine("❌ 验证失败,错误详情:");
                    foreach (var error in validationErrors)
                    {
                        Console.WriteLine($"- 字段[{error.Property}]:{error.Message}");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"⚠️ 执行过程中出现异常:{ex.Message}");
            }
        }
    }
}

3. 关键注意事项

  • JSON格式正确性:必须确保Schema和待验证的JSON都是标准JSON(使用双引号,不能用单引号),否则NJsonSchema会解析失败。
  • Schema加载方式:除了从文件加载,也可以直接从字符串加载Schema,比如:
    var schemaJson = @"{""type"":""object"", ""properties"": {...}}"; // 标准JSON字符串
    var schema = await JsonSchema.FromJsonAsync(schemaJson);
    
  • 错误排查:如果验证失败,validationErrors集合会返回具体的错误位置和原因,比如字段类型不匹配、必填字段缺失等,方便快速定位问题。

4. 测试示例JSON

用你提供的测试JSON运行上述代码,会输出✅ JSON响应与Schema完全匹配,验证通过!,因为示例JSON完全符合Schema的要求。

内容的提问来源于stack exchange,提问作者Dileep17

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:41:13