#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
содержит вызов пользовательской проверки, и без этого мы застрянем в бесконечном цикле.
Теперь я могу запустить значение через эту локальную схему и получить полный отчет обо всех возникающих ошибках и доставить соответствующее пользовательское сообщение об ошибке.
Пользовательские сообщения об ошибках имеют имена свойств, которые соответствуют заданному типу ошибки в ошибках проверки, что упрощает поиск.