JSON для API Reference
Раздел api преобразует JSON-описание публичного C# API в страницы пространств имен, типов и членов. Сформируйте файл через CSharpApiExtractor или создайте такую же структуру другим инструментом, затем загрузите его в редактор раздела API Reference.
Структура верхнего уровня
Ключи корневого объекта — пространства имен. Значение каждого пространства имен — объект, ключами которого служат относительные имена типов. Для типов в глобальном пространстве имен используйте пустую строку. Вложенные типы записываются через точку, например Client.Options.
{
"Acme.Sdk": {
"Client": {
"name": "Client",
"summary": "Выполняет запросы к сервису Acme.",
"declaration": "public sealed class Client",
"type": 0,
"access": "public",
"isStatic": 0,
"isAbstract": 0,
"baseClass": "Object",
"interfaces": ["IDisposable"],
"members": []
}
}
}
Объекты пространства имен и типа обязательны. Некорректные значения пространств имен и типов пропускаются. У типа должен быть непустой ключ или поле name; поле declaration используется при создании стабильного маршрута viewer.
Поля типа
name— имя типа относительно пространства имен. Если поле не задано, используется ключ объекта.summary— текст документации, обычно извлеченный из XML-тегаsummary.declaration— полная C#-декларация, которая отображается в справочнике.type— вид типа:0— class,1— interface,2— struct,3— enum,4— record. Также допустимы строкиclass,interface,struct,enumиrecord. По умолчанию используется class.access— модификатор доступа; значение по умолчанию —public.isStatic,isAbstract— логические флаги. Допустимы JSON boolean и значения0/1.baseClass— имя базового класса.interfaces— массив имен реализованных интерфейсов.members— массив объектов членов типа.
Поля члена типа
Каждому члену нужны непустое поле name и числовое поле type больше нуля. Неподдерживаемые или неполные элементы пропускаются.
type—1для поля или события,2для свойства,3для конструктора, метода или оператора,4для делегата,5для индексатора,6для значения enum. Элемент типа 1 со значениемAction,FuncилиPredicateвvalueTypeотображается как событие.name,declaration,summaryиaccessописывают член и его отображаемую сигнатуру.valueTypeсодержит тип поля, события, свойства, индексатора или возвращаемого значения.isStatic,isVirtual,isAbstract,isGeneric,hasGetиhasSet— логические флаги.parameters— массив объектов параметров.
При type: 3 имя .ctor создает конструктор. Статическое имя с префиксом op_ создает оператор, остальные значения — методы.
Пример члена
Следующий объект описывает публичный асинхронный метод. Поместите его в массив members нужного типа.
{
"name": "GetAsync",
"declaration": "public Task<Item> GetAsync(string id, CancellationToken cancellationToken = default)",
"type": 3,
"summary": "Возвращает объект по ID.",
"access": "public",
"isStatic": false,
"isGeneric": false,
"isVirtual": false,
"isAbstract": false,
"valueType": "Task<Item>",
"parameters": [
{
"name": "id",
"type": "string",
"summary": "Идентификатор объекта."
},
{
"name": "cancellationToken",
"type": "CancellationToken",
"summary": "Отменяет операцию.",
"isOptional": true,
"defaultValue": "default"
}
]
}Поля параметра
nameиtypeзадают имя и тип параметра.summaryсодержит документацию параметра.refKindхранит модификаторref,outилиin.isOptionalотмечает необязательный параметр, аdefaultValueхранит отображаемое значение по умолчанию.
Полный пример
{
"Acme.Sdk": {
"Client": {
"name": "Client",
"summary": "Выполняет запросы к сервису Acme.",
"declaration": "public sealed class Client : IDisposable",
"type": 0,
"baseClass": "Object",
"interfaces": ["IDisposable"],
"members": [
{
"name": ".ctor",
"declaration": "public Client(string endpoint)",
"type": 3,
"summary": "Создает клиент.",
"parameters": [
{
"name": "endpoint",
"type": "string",
"summary": "URL сервиса."
}
]
},
{
"name": "GetAsync",
"declaration": "public Task<Item> GetAsync(string id, CancellationToken cancellationToken = default)",
"type": 3,
"summary": "Возвращает объект.",
"valueType": "Task<Item>",
"parameters": [
{ "name": "id", "type": "string", "summary": "Идентификатор объекта." },
{
"name": "cancellationToken",
"type": "CancellationToken",
"isOptional": 1,
"defaultValue": "default"
}
]
}
]
}
}
}Проверка и маршруты
Источник должен быть корректным JSON с объектом в корне. One File Docs нормализует и сортирует пространства имен, типы и группы членов. ID viewer формируются из деклараций, поэтому сохраняйте декларации стабильными и различайте сигнатуры перегруженных членов. После загрузки проверьте показанные редактором количества пространств имен, типов и членов перед сохранением или экспортом.