Берёшь свой запрос. Открываешь программу
Postman. Отправляешь запрос. Копируешь полученный JSON в буфер обмена. Переходишь на какой-нибудь сайт вроде
https://json2csharp.com/ и вставляешь туда JSON. Копируешь полученные классы, правильно именуешь. Параметры генерации классов:
Кстати, для поискового запроса (текста) можно попробовать использовать
Uri.EscapeUriString
Подключение быстрого сериализатора
System.Text.Json из .NET Core
RestSharpExample.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="RestSharp" Version="106.11.7" />
<PackageReference Include="RestSharp.Serializers.SystemTextJson" Version="106.11.7" />
</ItemGroup>
</Project>
Api/Kinopoisk/
KinopoiskService.cs
using System.Threading.Tasks;
using System.Web;
using RestSharp;
using RestSharp.Serializers.SystemTextJson;
using RestSharpExample.Api.Kinopoisk.Model;
namespace RestSharpExample.Api.Kinopoisk
{
public class KinopoiskService
{
private const string API = "https://api.kinopoisk.cloud/";
private const string TOKEN = "7777";
private readonly RestClient _client;
public KinopoiskService()
{
_client = new RestClient(API);
_client.UseSystemTextJson();
}
public async Task<SearchResult> SearchAsync(string movieTitle)
{
var request = new RestRequest($"movies/search/{HttpUtility.UrlEncode(movieTitle)}/token/{TOKEN}", Method.GET);
var response = await _client.ExecuteAsync<SearchResult>(request);
return response.Data;
}
}
}
Program.cs
using System;
using System.Linq;
using System.Threading.Tasks;
using RestSharpExample.Api.Kinopoisk;
using RestSharpExample.Api.Kinopoisk.Model;
namespace RestSharpExample
{
class Program
{
private KinopoiskService _kinopoisk;
#region Entry point
static async Task Main(string[] args)
{
var program = new Program();
await program.Run(args);
}
#endregion
private async Task Run(string[] args)
{
_kinopoisk = new KinopoiskService();
try
{
string searchRequest = "Дурак";
SearchResult result = await _kinopoisk.SearchAsync(searchRequest);
Console.WriteLine($"Результаты поиска по запросу \"{searchRequest}\":");
if (result.Results.Any())
{
Display(result.Results.First());
}
else
{
Console.WriteLine("Ничего не найдено.");
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
private void Display(SearchMovieInfo info)
{
Console.WriteLine($"ИД: {info.Id}, Название: {info.Title}, Год: {info.Year}");
}
}
}
Api/Kinopoisk/Model/
SearchResult.cs
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace RestSharpExample.Api.Kinopoisk.Model
{
public class SearchResult
{
[JsonPropertyName("results")]
public List<SearchMovieInfo> Results { get; set; }
[JsonPropertyName("pagination")]
public Pagination Pagination { get; set; }
}
}
Api/Kinopoisk/Model/
SearchMovieInfo.cs
using System.Text.Json.Serialization;
namespace RestSharpExample.Api.Kinopoisk.Model
{
public class SearchMovieInfo
{
[JsonPropertyName("id")]
public string Id { get; set; }
[JsonPropertyName("id_kinopoisk")]
public int IdKinopoisk { get; set; }
[JsonPropertyName("title")]
public string Title { get; set; }
[JsonPropertyName("description")]
public string Description { get; set; }
[JsonPropertyName("year")]
public int Year { get; set; }
[JsonPropertyName("poster")]
public string Poster { get; set; }
[JsonPropertyName("rating_kinopoisk")]
public double? RatingKinopoisk { get; set; }
[JsonPropertyName("rating_imdb")]
public double? RatingImdb { get; set; }
}
Api/Kinopoisk/Model/
Pagination.cs
using System.Text.Json.Serialization;
namespace RestSharpExample.Api.Kinopoisk.Model
{
public class Pagination
{
[JsonPropertyName("current_page")]
public string CurrentPage { get; set; }
[JsonPropertyName("end_page")]
public string EndPage { get; set; }
[JsonPropertyName("total_pages")]
public int TotalPages { get; set; }
}
}