JSON.Сетевая схема множественных пользовательских проверок

#json.net #jsonschema

#json.net #jsonschema

Вопрос:

Я использую Newtonsoft.Json.Библиотека схемы и использование пользовательских проверок для создания пользовательских сообщений об ошибках, которые сами определены в схеме.

 "sku" : {
        "type" : "string", 
        "message" : {
                      "required" : "The SKU is a required field", 
                   }, 
         "format" : "Required"
 }
  

Это работает нормально, и я могу извлечь сообщение из данной схемы при выполнении пользовательской проверки.

Однако я хотел бы добавить больше пользовательских проверок, таких как:

 "sku" : {
        "type" : "string",
        "pattern" : "d",
        "message" : {
                      "required" : "The SKU is a required field",
                      "pattern" : "The SKU must be a number" 
                   }, 
         "format" : "Pattern"  <--- can only specify a single custom validation
 }
  

Есть ли какой-либо способ запустить второй пользовательский валидатор, чтобы получить пользовательскую проверку как для required, так и для pattern?

(Просто чтобы предоставить некоторую информацию здесь… у нас есть входящие данные, которые должны быть проверены, но ошибки должны быть значимыми в бизнес-контексте, из которого исходят данные. Этот бизнес-контекст неизвестен, поэтому сообщения, зависящие от контекста, такие как ошибки, должны каким-то образом предоставляться для проверки).

Ответ №1:

Итак, в конце я выполнил единую пользовательскую проверку, которая создает новую схему из пользовательского контекста проверки следующим образом:

 JSchema valueSchema = JSchema.Parse(context.Schema.ToString() );
  

Это создает новую схему только для значения, обрабатываемого пользовательской проверкой, без каких-либо пользовательских вызовов проверки. Необходимый шаг, потому что существующая схема в context.Schema содержит вызов пользовательской проверки, и без этого мы застрянем в бесконечном цикле.

Теперь я могу запустить значение через эту локальную схему и получить полный отчет обо всех возникающих ошибках и доставить соответствующее пользовательское сообщение об ошибке.

Пользовательские сообщения об ошибках имеют имена свойств, которые соответствуют заданному типу ошибки в ошибках проверки, что упрощает поиск.