我正在使用json.net schema .net库。
假设我已经定义了一个JSON模式:
JSchema schema = JSchema.Parse(@"{
'type': 'object',
'required' : ['name'],
'properties': {
'name': {'type':'string'},
'roles': {'type': 'array'}
}
}");
现在我正在验证一个JSON对象(请注意,我没有定义name
属性):
JObject user = JObject.Parse(@"{
'roles': ['Developer', 'Administrator']
}");
user.IsValid(schema, out IList<ValidationError> errors);
Debug.WriteLine(errors[0].ErrorType);
最后一行的输出将为Required
。这样,我知道运行时的特定错误类型,我可以按照以下错误类型做出决策。
我的问题是,当我使用自定义验证规则时,我无法定义自定义错误类型。因此,我所有的自定义验证者将使用ErrorType
属性等于Validator
创建一个错误实例,例如以下示例:
定义自定义验证规则:
class MyCustomValidator : JsonValidator
{
public override void Validate(JToken value, JsonValidatorContext context)
{
var s = value.ToString();
if (s != "valid")
{
context.RaiseError($"Text '{s}' is not valid.");
}
}
public override bool CanValidate(JSchema schema)
{
return schema.Type == JSchemaType.String;
}
}
并使用自定义验证规则运行验证:
JSchema schema = JSchema.Parse(@"{
'type': 'object',
'required' : ['name'],
'properties': {
'name': {'type':'string'},
'roles': {'type': 'array'}
}
}");
JObject user = JObject.Parse(@"{
'name': 'Ivalid',
'roles': ['Developer', 'Administrator']
}");
schema.Validators.Add(new MyCustomValidator()); // adding custom validation rule
user.IsValid(schema, out IList<ValidationError> errors);
Debug.WriteLine(errors[0].ErrorType);
输出将为Validator
。
我的问题是:这种情况有能力解决吗?我如何在它们之间的自定义验证规则和彼此的标准错误类型之间区分我的自定义验证规则产生的错误?
谢谢!
我在我打开的github问题中收到了json.net schema的作者的反馈。作者说:
hi
错误类型是一个枚举,因此没有办法在 运行。您需要嵌入有关错误的信息 在消息中并测试内容。
即:当前无法在运行时自定义错误类型属性。