Прежде всего, Форс поддерживает только ассоциативные массивы, где ключи являются строками, например:
{
"foo": 5,
"bar": 2
}
но не С # Dictionary<int, string>
где ключи int
.
Ассоциативный массив определяется с помощью схемы object
с ключевым словом additionalProperties
, определяющим тип значений массива. Тип ключа не упоминается, поскольку ключи всегда являются строками.
type: object
additionalProperties:
type: <type of array values>
# OR
# $ref: '#/definitions/ValueModel'
Аналогично, массив ассоциативных массивов может быть определен следующим образом:
type: array
items:
type: object
additionalProperties:
type: <type of values in associative array>
# OR
# $ref: '#/definitions/ValueModel'
В вашем примере, значение ассоциативного массива имеет типа AnotherModel
. Так что определение рядный будет выглядеть следующим образом:
responses:
200:
description: search results matching criteria
schema:
type: array
items:
type: object
additionalProperties:
$ref: '#/definitions/AnotherModel'
definitions:
AnotherModel:
type: <whatever> # TODO
Или, если ввести промежуточный MainModel
, представляющий ассоциативный массив (как в исходном примере):
responses:
200:
description: search results matching criteria
schema:
type: array
items:
$ref: '#/definitions/MainModel'
definitions:
MainModel: # Associative array of AnotherModel
type: object
additionalProperties:
$ref: '#/definitions/AnotherModel'
AnotherModel:
type: <whatever> # TODO
Несколько примечаний:
Каждая модель, на которую ссылаются через $ref
, должна быть определена в разделе definitions
. Так что если вы используете $ref: '#/definitions/MainModel'
, ваша спецификация должна включать в себя
definitions:
MainModel:
$ref
работы, заменив себя и все свои одноуровневые элементы с определением она, указывая на. Вот почему ваш оригинальный пример не является действительным:
items:
$ref: '#/definitions/MainModel'
type: array
items: $ref: '#/definitions/AnotherModel'
Вложенные модели могут быть либо определены полностью рядный или ссылки через $ref
, но не оба.
Иными словами, GET возвращает массив 'MainModel', где' MainModel' является ассоциативным массивом 'AnotherModel'? – Helen
Да, будут элементы x AnotherModel, связанные с каждым элементом в MainModel. –