Manatee.Json 获得人类可读的 SchemaValidationResults 输出
Manatee.Json get human readable SchemaValidationResults output
如何以人类可读的格式(例如 JSON)打印 SchemaValidationResults? Documentation page 讨论了不同的输出格式 (JsonSchemaOptions.OutputFormat
属性),但我不知道如何进行文本表示。
我的代码具有以下模式:
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
扩展代码:
// Subject is SchemaValidationResults
Execute.Assertion.
Given(() => Subject).
ForCondition(s => s.IsValid).
FailWith("Validation Errors: {0}", Subject.ErrorMessage);
但得到的错误信息是:"Items at indices [2,4] failed validation."
但我想看到更全面的输出。
输出是 2019-09 草案的递归结构。这意味着进一步的结果包含在顶级结构中。
在您的情况下,您正在查找错误,因此您需要查看 validationResult.NestedResults
(之前的编辑有 .Errors
)属性。您可以在这里找到所需的其他详细信息。
或者,您可以通过设置 JsonSchemaOptions.OutputFormat = SchemaValidationOutputFormat.Basic;
将输出格式更改为平面列表。这也是规范中详述的输出格式之一。
对于我的情况,我通过以下方式获得验证错误列表。
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;
}
如何以人类可读的格式(例如 JSON)打印 SchemaValidationResults? Documentation page 讨论了不同的输出格式 (JsonSchemaOptions.OutputFormat
属性),但我不知道如何进行文本表示。
我的代码具有以下模式:
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
扩展代码:
// Subject is SchemaValidationResults
Execute.Assertion.
Given(() => Subject).
ForCondition(s => s.IsValid).
FailWith("Validation Errors: {0}", Subject.ErrorMessage);
但得到的错误信息是:"Items at indices [2,4] failed validation."
但我想看到更全面的输出。
输出是 2019-09 草案的递归结构。这意味着进一步的结果包含在顶级结构中。
在您的情况下,您正在查找错误,因此您需要查看 validationResult.NestedResults
(之前的编辑有 .Errors
)属性。您可以在这里找到所需的其他详细信息。
或者,您可以通过设置 JsonSchemaOptions.OutputFormat = SchemaValidationOutputFormat.Basic;
将输出格式更改为平面列表。这也是规范中详述的输出格式之一。
对于我的情况,我通过以下方式获得验证错误列表。
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;
}