Преобразование JSON из API CALL в классы C# и передача между компонентами BlazorC#

Место общения программистов C#
Ответить
Anonymous
 Преобразование JSON из API CALL в классы C# и передача между компонентами Blazor

Сообщение Anonymous »

Впервые работа с JSON в C#. Я строю приложение Blazor, используя данные AMADEUS API (поиск полетов), и я не могу, казалось, могу использовать объект JSON в компоненте Blazor. < /P>
Ошибка, которую я получаю: < /p>

Компонент verending: < /p>

System.collections.generic.list`1 [flights.models.rootobject] < /p>
< /blockquote>
, который, я думаю, может быть потому, что я не строю свои классы C# правильно.{
"data": [
{
"type": "flight-destination",
"origin": "XOC",
"destination": "YJB",
"departureDate": "2025-08-19",
"returnDate": "2025-08-21",
"price": {
"total": "60.0"
},
"links": {
"flightDates": "https://test.api.amadeus.com/v1/shoppin ... ESTINATION",
"flightOffers": "https://test.api.amadeus.com/v2/shoppin ... ESTINATION"
}
},
{
"type": "flight-destination",
"origin": "MAD",
"destination": "AUH",
"departureDate": "2025-07-22",
"returnDate": "2025-07-28",
"price": {
"total": "679.07"
},
"links": {
"flightDates": "https://test.api.amadeus.com/v1/shoppin ... ESTINATION",
"flightOffers": "https://test.api.amadeus.com/v2/shoppin ... ESTINATION"
}
}
],
"dictionaries": {
"currencies": {
"EUR": "Euro"
},
"locations": {
"MXP": {
"subType": "AIRPORT",
"detailedName": "MALPENSA"
},
"AMS": {
"subType": "AIRPORT",
"detailedName": "SCHIPHOL AIRPORT"
}
}
},
"meta": {
"currency": "EUR",
"links": {
"self": "https://test.api.amadeus.com/v1/shoppin ... ESTINATION"
},
"defaults": {
"departureDate": "2025-07-16,2026-01-10",
"oneWay": false,
"duration": "1,15",
"nonStop": false,
"viewBy": "DESTINATION"
}
},
"warnings": []
}
< /code>
Я затем попытался отразить мои классы C#, чтобы соответствовать структуре JSON: < /p>
namespace Flights.Models
{
public class RootObject
{
public Data[] data { get; set; }
public Dictionaries dictionaries { get; set; }
public Meta meta { get; set; }
public object[] warnings { get; set; }
}

public class Data
{
public string type { get; set; }
public string origin { get; set; }
public string destination { get; set; }
public string departureDate { get; set; }
public string returnDate { get; set; }
public Price price { get; set; }
public Links links { get; set; }
}

public class Price
{
public string total { get; set; }
}

public class Links
{
public string flightDates { get; set; }
public string flightOffers { get; set; }
}

public class Dictionaries
{
public Currencies currencies { get; set; }
}

public class Currencies
{
public string EUR { get; set; }
}

public class Meta
{
public string currency { get; set; }
public Links1 links { get; set; }
public Defaults defaults { get; set; }
}

public class Links1
{
public string self { get; set; }
}

public class Defaults
{
public string departureDate { get; set; }
public bool oneWay { get; set; }
public string duration { get; set; }
public bool nonStop { get; set; }
public string viewBy { get; set; }
}
}
< /code>
и метод, который я использую для получения данных в поле назначения, чтобы я мог передать это в детский компонент: < /p>
private List destinations;

private async Task GetMostTravelledDestinations(string accessToken)
{
var request = new HttpRequestMessage(HttpMethod.Get, "https://test.api.amadeus.com/v1/shoppin ... origin=MAD");
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken);
request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

var response = await Http.SendAsync(request);

if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
var parsed = JsonSerializer.Deserialize(json, options);

if (parsed != null)
{
foreach (var rootObject in parsed)
{
Console.WriteLine($"{rootObject.data}");
}

destinations = parsed;

using var doc = JsonDocument.Parse(json);
var root = doc.RootElement;

if (root.TryGetProperty("data", out var dataArray))
{
Console.WriteLine($"Data contains {dataArray.GetArrayLength()} items.");
}
else
{
Console.WriteLine("No 'data' property found.");
}

return parsed;
}
}

return new List();
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... or-compone
Ответить

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

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

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

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

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