Веб-API ASP.NET Core 8: невозможно преобразовать строку в объект JSONC#

Место общения программистов C#
Ответить
Anonymous
 Веб-API ASP.NET Core 8: невозможно преобразовать строку в объект JSON

Сообщение Anonymous »

Я получаю строку json из вызова стороннего API, используя приведенный ниже метод C# в моем API. Теперь мне нужно вернуть это через мой API.

Код: Выделить всё

using var responseStream =  response.Content.ReadAsStreamAsync().Result;
Получены данные JSON:

Код: Выделить всё

{
"resources":[
{
"asset_id":"0be6920b67900d9dcb692dafc8752144",
"public_id":"312555/Deep_Sleep_iv1xdf",
"format":"png",
"version":1735387533,
"resource_type":"image",
"type":"upload",
"created_at":"2024-12-28T12:05:33Z",
"bytes":58989,
"width":612,
"height":412,
"asset_folder":"312555",
"display_name":"Deep Sleep",
"url":"http://res.cloudinary.com/catco-mls/image/upload/v1735387533/312555/Deep_Sleep_iv1xdf.png",
"secure_url":"https://res.cloudinary.com/catco-mls/image/upload/v1735387533/312555/Deep_Sleep_iv1xdf.png"
},
{
"asset_id":"8726add67eb8a3b7462a078f335acddc",
"public_id":"312555/stage3negotiation_e5g3z9",
"format":"jpg",
"version":1735387420,
"resource_type":"image",
"type":"upload",
"created_at":"2024-12-28T12:03:40Z",
"bytes":1410672,
"width":2000,
"height":1333,
"asset_folder":"312555",
"display_name":"stage3negotiation",
"url":"http://res.cloudinary.com/catco-mls/image/upload/v1735387420/312555/stage3negotiation_e5g3z9.jpg",
"secure_url":"https://res.cloudinary.com/catco-mls/image/upload/v1735387420/312555/stage3negotiation_e5g3z9.jpg"
},
{
"asset_id":"5255df4456604743b34769c8105f1552",
"public_id":"312555/TROPICAT-Photo-14-11-2024-1-04-31-pm_kndjym",
"format":"jpg",
"version":1735387420,
"resource_type":"image",
"type":"upload",
"created_at":"2024-12-28T12:03:40Z",
"bytes":131855,
"width":600,
"height":800,
"asset_folder":"312555",
"display_name":"TROPICAT-Photo-14-11-2024-1-04-31-pm",
"url":"http://res.cloudinary.com/catco-mls/image/upload/v1735387420/312555/TROPICAT-Photo-14-11-2024-1-04-31-pm_kndjym.jpg",
"secure_url":"https://res.cloudinary.com/catco-mls/image/upload/v1735387420/312555/TROPICAT-Photo-14-11-2024-1-04-31-pm_kndjym.jpg"
},
{
"asset_id":"c62a24332bd62b595672f5086772751e",
"public_id":"312555/stage4undercontract_iwglqm",
"format":"webp",
"version":1735387420,
"resource_type":"image",
"type":"upload",
"created_at":"2024-12-28T12:03:40Z",
"bytes":99008,
"width":1600,
"height":1060,
"asset_folder":"312555",
"display_name":"stage4undercontract",
"url":"http://res.cloudinary.com/catco-mls/image/upload/v1735387420/312555/stage4undercontract_iwglqm.webp",
"secure_url":"https://res.cloudinary.com/catco-mls/image/upload/v1735387420/312555/stage4undercontract_iwglqm.webp"
}
],
"total_count":4,
"next_cursor":null
}
.NET для хранения этой информации:

Код: Выделить всё

public class Cloudinary
{
public class Resource
{
public string asset_id { get; set; }
public string public_id { get; set; }
public string format { get; set; }
public int version { get; set; }
public string resource_type { get; set; }
public string type { get; set; }
public DateTime created_at { get; set; }
public int bytes { get; set; }
public int width { get; set; }
public int height { get; set;  }
public string asset_folder { get; set; }
public string display_name { get; set; }
public string url { get; set; }
public string secure_url { get; set; }
}

public class Root
{
public List resources { get; set; }
public int total_count { get; set; }
public object next_cursor { get; set; }
}
}
Я пробовал несколько вариантов, вот несколько.
Вариант 1

Код: Выделить всё

var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();

var result = response.Content.ReadAsStringAsync().Result;

var data =  JsonSerializer.Deserialize(result);
При попытке выполнения этого кода я получаю следующую ошибку:

При обработке запроса произошло необработанное исключение.

JsonException: значение JSON не удалось преобразовать в System.Collections.Generic.List`1[Core.LibraryAdmin.Models.Cloudinary+Root]. Путь: $ | НомерЛинии: 0 | BytePositionInLine: 1.

System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)

Вариант 2< /strong>

Код: Выделить всё

if (response.IsSuccessStatusCode)
{
using var responseStream =  response.Content.ReadAsStreamAsync().Result;

Cloudinary.Resource? resource = await JsonSerializer.DeserializeAsync(responseStream);

return resource;
}
Я не получаю ошибок при использовании этого кода, но он дает желаемый результат: все поля имеют значение null, когда он возвращается из API.
Мой настоящий метод:

Код: Выделить всё

public async static Task GetImages(string BoatId)
Пожалуйста, подскажите, что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/793 ... son-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»