首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Manatee.Json获得人类可读的SchemaValidationResults输出

Manatee.Json获得人类可读的SchemaValidationResults输出
EN

Stack Overflow用户
提问于 2020-07-15 03:55:07
回答 2查看 106关注 0票数 0

如何以人类可读的格式(例如JSON)打印SchemaValidationResults?文件页讨论不同的输出格式(JsonSchemaOptions.OutputFormat属性),但我不知道如何实现文本表示。

我的代码有以下模式:

代码语言:javascript
复制
JsonSchema schema = _SchemaReader.Get(schemaPath);
JsonValue json = JsonValue.Parse(jsonDoc);
SchemaValidationResults validationResult = schema.Validate(json, new JsonSchemaOptions()
{
    OutputFormat = SchemaValidationOutputFormat.Detailed
});

validationResult.Should().BeValid(); // Custom FluentAssertions extension

自定义FluentAssertions扩展代码:

代码语言:javascript
复制
// Subject is SchemaValidationResults
Execute.Assertion.
    Given(() => Subject).
    ForCondition(s => s.IsValid).
    FailWith("Validation Errors: {0}", Subject.ErrorMessage);

但由此产生的错误消息是:"Items at indices [2,4] failed validation.",但我希望看到更全面的输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-15 05:32:58

输出是2019年至09年草案的递归结构。这意味着更多的结果包含在高层结构中。

在您的示例中,您需要查找错误,因此需要查看validationResult.NestedResults (以前的编辑有.Errors)属性。在这里,您将找到您想要的其他细节。

或者,可以通过设置JsonSchemaOptions.OutputFormat = SchemaValidationOutputFormat.Basic;将输出格式更改为平面列表。这也是规范中详细描述的输出格式之一。

票数 1
EN

Stack Overflow用户

发布于 2020-07-23 01:19:21

对于我的情况,我得到验证错误列表的方式如下。

代码语言:javascript
复制
public static List<string> GetValidationErrors(SchemaValidationResults validationResult)
{
    if (validationResult.IsValid)
    {
        return new List<string>(0);
    }

    var errorList = new List<string>(8);
    if (!string.IsNullOrWhiteSpace(validationResult.ErrorMessage))
    {
        errorList.Add(validationResult.ErrorMessage);
    }

    foreach (SchemaValidationResults vrslt in validationResult.NestedResults)
    {
        errorList.AddRange(GetValidationErrors(vrslt));
    }
    return errorList;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62907352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档