C# Json.NET模式:使用自定义Json验证规则时的自定义错误类型

C# Json.NET模式:使用自定义Json验证规则时的自定义错误类型,c#,.net,json.net,jsonschema,C#,.net,Json.net,Jsonschema,我正在使用.NET库 假设我定义了一个JSON模式,如下所示: JSchema schema = JSchema.Parse(@"{ 'type': 'object', 'required' : ['name'], 'properties': { 'name': {'type':'string'}, 'roles': {'type': 'array'} } }"); 现在,我正在验证一个JSON对象(请注意,我没有定义name属性

我正在使用.NET库

假设我定义了一个JSON模式,如下所示:

JSchema schema = JSchema.Parse(@"{
    'type': 'object',
    'required' : ['name'],
    'properties': {
        'name': {'type':'string'},
        'roles': {'type': 'array'}
    }
}");
现在,我正在验证一个JSON对象(请注意,我没有定义
name
属性):

并使用自定义验证规则运行验证:

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);
JSchema schema=JSchema.Parse(@){
“类型”:“对象”,
“必需”:[“名称”],
“属性”:{
'name':{'type':'string'},
'roles':{'type':'array'}
}
}");
JObject user=JObject.Parse(@){
'name':'Ivalid',
“角色”:[“开发人员”、“管理员”]
}");
schema.Validators.Add(新的MyCustomValidator());//添加自定义验证规则
user.IsValid(模式,输出IList错误);
Debug.WriteLine(错误[0].ErrorType);
输出将是
验证程序

我的问题是:这个案子有解决办法吗?如何区分自定义验证规则产生的错误,以及它们与其他标准错误类型之间的差异


谢谢

我收到了Json.NET模式作者在我打开的一封邮件中的反馈。作者说:

ErrorType是一个枚举,因此无法在 运行时。您需要嵌入有关错误原因的信息 在消息中,并测试内容

也就是说:当前无法在运行时自定义错误类型属性

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);