/ / JSON.Net потвърждаване на схема, без да маркирате допълнителни свойства? - json.net, jsonschema

JSON.Net потвърждаването на схемата не маркира допълнителни свойства? - json.net, jsonschema

Използвам NewtonSoft.JSON да направи някаква проверка на JSON схема. Виждам, че валидирането връща "ISValid = true", ако JSON има допълнителни данни, различни от това, което е посочено в схемата. Кодът и данните са по-долу. схемата няма дефиниция на собственост за собственост, наречена "град", данните, идващи от JSON, имат собственост и стойност за нея. Очаквам повикването IsValid по-долу да се върне фалшиво, но се връща вярно. Има ли настройка на схемата или на класацията като "Изпълнение на строги" или нещо подобно, което ще наложи, че данните имат всички и единствено данните, посочени в схемата?

   public static void ValidateJsonSchema(string expectedSchema, string actualData)
{
JsonSchema validSchema = JsonSchema.Parse(expectedSchema);
JObject actualJson = JObject.Parse(actualData);

IList<string> messages;
if (!actualJson.IsValid(validSchema, out messages))
{
throw new Exception("Returned data JSON schema validation failed." + messages.ToXml());
}
}

Отговори:

3 за отговор № 1

Нагласи additionalProperties собствеността върху схемата да бъде фалшива, така че валидирането да се провали, когато има допълнителни свойства върху данните, които валидирате.

Например, ако утвърждавате адрес с име и номер на улица, но не и град, то ще изглежда така:

{
"title": "Address",
"type": "object"
"additionalProperties": false,
"properties": {
"streetName": {
"type": "string"
},
"streetNum": {
"type": "integer"
}
}
}

Горното ще гарантира, че валидирането няма да бъде успешноако има някакви допълнителни свойства в данните. Въпреки това, тя ще продължи да валидира, ако сте пропуснали даден имот (напр. StreetName). За да се гарантира използването на всички посочени свойства required за всеки имот като този:

{
"title": "Address",
"type": "object"
"additionalProperties": false,
"properties": {
"streetName": {
"type": "string",
"required": true
},
"streetNum": {
"type": "integer",
"required": true
}
}
}

Горното ще гарантира, че данните съдържат всяка собственост и само тези свойства.

Като странична нота не можах да намеря никаква информация, специфична за JSON.Net и утвърждаването на схеми, но намерих json схемата място много полезна за сложна проверка на схеми.


0 за отговор № 2

Можете също така да зададете AllowAdditionalProperties = false в validSchema обект

public static void ValidateJsonSchema(string expectedSchema, string actualData)
{
JsonSchema validSchema = JsonSchema.Parse(expectedSchema);
validSchema.AllowAdditionalProperties = false;
JObject actualJson = JObject.Parse(actualData);

IList<string> messages;
if (!actualJson.IsValid(validSchema, out messages))
{
throw new Exception("Returned data JSON schema validation failed." + messages.ToXml());
}

}