Вы, вероятно, хотите иметь определение для csharpDouble
(или аналогичного), в котором вы определяете, что это может быть либо
- число, либо
- одно из значений
"NaN"
, "Infinity"
или "-Infinity"
Для первого вам нужно
{ "type": "number" }
Для второго вам нужно
{ "enum": [ "NaN", "Infinity", "-Infinity" ] }
Таким образом, ваша схема будет
{
...
"definitions": { // or $defs for draft 2019-09
...
"csharpDouble": {
"oneOf": [
{ "type": "number" },
{ "enum": [ "NaN", "Infinity", "-Infinity" ] }
]
},
...
},
...
}
Это позволит использовать такие экземпляры, как
{ "myDouble": 5.24, "myOtherDouble": "NaN" }
, где myDouble
и myOtherDouble
являются свойствами, ограниченными для проверки по #/definitions/csharpDouble
Затем в десериализаторе может потребоваться предоставить пользовательский лог c для десериализации строковых значений в соответствующие поля stati c типа double
.