Re[14]: Как распарсить СМИ2?
От: karbofos42 Россия  
Дата: 06.11.24 13:10
Оценка: 1 (1)
Здравствуйте, Passerby, Вы писали:

P>Не могли бы просветить по теории. Объявляется метод:


У меня там вызывается Generic-метод:
public static Task<HttpResponseMessage> PostAsJsonAsync<TValue>(this HttpClient client, [StringSyntax(StringSyntaxAttribute.Uri)] string? requestUri, TValue value, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default)

Вообще, полный вызов был бы:
client.PostAsJsonAsync<Filter>(@"https://smi2.ru/newdata/jsapi?action=articles", filter)

но т.к. в метод передаётся параметр value, то <TValue> можно опустить и компилятор сам его добавит по типу переменной filter.

Для GetFromJsonAsync нужно уже явно в <> указывать данные какого типа нужно из json десериализовать и тогда он вернёт объект нужного типа

Если использовать вариант метода:
P>
P>public static System.Threading.Tasks.Task<object?> GetFromJsonAsync (this System.Net.Http.HttpClient client, string? requestUri, Type type, System.Threading.CancellationToken cancellationToken = default);
P>

то в type указывается ожидаемый тип, а дальше вручную из object к нему привозить нужно. Такое бывает нужно, если тип в режиме выполнения как-то определяется.
Когда на этапе компиляции тип известен, то естественно удобнее и лучше использовать Generic-методы и вызывать что-то типа:
client.GetFromJsonAsync<Article>(url)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.