insighter
@insighter
-First time? - Huh? (C#, React, JS)

Как в контроллере вернуть уже сериализованный json?

Есть задача, что бы контроллер возвращал уже сериализованный json, который он получает от внешнего API метода который он проксирует.

Сейчас такой вариант:

public async Task<IActionResult> GetPayInfoAsync(Guid transactionId)
{
    ... 
    using var response = await client.SendAsync(request);
    var responseText = await response.Content.ReadAsStringAsync();

    return new ObjectResult(responseText) { ContentTypes = { new ("application/json") } };
}


Возвращает правильный заголовок, но добавляет зачем то кавычку перед ответом и после ответа :
640eb0a175c82486719990.jpeg
(на картинке только часть ответа)

Если возвращать в контроллере как строку, то библиотека автоматом прописывает plain/text в заголовок.
  • Вопрос задан
  • 232 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вы получаете JSON в виде строки и снова её кодируете в JSON.
--return new ObjectResult(responseText) { ContentTypes = { new ("application/json") } };
++return new ObjectResult(
++    JsonConvert.DeserializeObject<object>(responseText);
++) { ContentTypes = { new ("application/json") } };
Ответ написан
insighter
@insighter Автор вопроса
-First time? - Huh? (C#, React, JS)
Ответ Rsa97 оказался почти правильным. Только надо использовать родную библиотеку .NET для десериализации, а не Newtonsoft.

Десериализатор возвращает объект типа JsonElement, который нормально конвертируется в ответе (тип данных в заголовке можно не указывать уже):
return new ObjectResult(System.Text.Json.JsonSerializer.Deserialize<object>(responseText));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы