Схема JSON.Net несколько пользовательских проверок - PullRequest
0 голосов
/ 24 апреля 2019

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

"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
 }

Есть ли способ заставить второй пользовательский валидатор работать в порядкеполучить пользовательскую проверку как для обязательного, так и для шаблона?

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

1 Ответ

0 голосов
/ 27 апреля 2019

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

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

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

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

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

...