Можно ли кастить long/double во float? Или long в double C#?

222
10 февраля 2020, 22:40

Получаю json по api преобразовываю в структуру, но там получается вложенные массивы и нужно это переконвертить в нужный мне класс. Но данные приходят иногда double иногда long. И не получается привести к общему типу пробывал и float и double. Сейчас оставил float так как в доке к API описано что должны быть float, но json парсер их определяет как double. Вот дока навсякий https://opensky-network.org/apidoc/rest.html. Вот скрин структурки, там выделил одно и тоже поле. Оно бывает double бывает long.

Это класс, что бы он знал как конвертить json

public class AirData
    {
            public string icao24;
            public string callsign;
            public string origin_country;
            public long time_position;
            public long last_contact;
            public float longitude;
            public float latitude;
            public float baro_altitude;
            public bool on_ground;
            public float velocity;
            public float true_track;
            public float vertical_rate;
            public object sensors;
            public float geo_altitude;
            public string squawk;
            public bool spi;
            public long position_source;   
    }

Это метод где пытаюсь приводить типы как нужно

public List<AirData> ConvertToAirData()
        {
            var temp = new List<AirData>();
            foreach (var notformatted in states)
            {
                var airData = new AirData();
                airData.icao24 = (string) notformatted[0];
                airData.callsign = (string) notformatted[1];
                airData.origin_country = (string) notformatted[2];
                airData.time_position = (long) notformatted[3];
                airData.last_contact = (long) notformatted[4];
                airData.longitude = (float) notformatted[5];
                airData.latitude = (float) notformatted[6];
                airData.baro_altitude = (float) notformatted[7];
                airData.on_ground = (bool) notformatted[8];
                airData.velocity = (float) notformatted[9];
                airData.true_track = (float) notformatted[10];
                airData.vertical_rate = (float) notformatted[11];
                airData.sensors = notformatted[12];
                airData.geo_altitude = (float) notformatted[13];
                airData.squawk = (string) notformatted[14];
                airData.spi = (bool) notformatted[15];
                airData.position_source = (long) notformatted[16];
                temp.Add(airData);
            }
            return temp;
        }

Выдает постоянно ошибки о не правильном приведении типа. "Необработанное исключение: System.InvalidCastException: Заданное приведение является недопустимым. " Проблема вроде решилась, как писал в комментах. Вот код как получаю json может кому будет полезно.

public static void Main(string[] args)
        {
            WebRequest request =
            WebRequest.Create("https://opensky-network.org/api/states/all?lamin=51.421812&lomin=23.139124&lamax=55.961184&lomax=33.472494");
            WebResponse response = request.GetResponse();
            Answer answer;
            using (Stream stream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    string fullJson = "";
                    string line = "";
                    while ((line = reader.ReadLine()) != null)
                    {
                        fullJson += line;
                    }
                    // Console.WriteLine(fullJson);
                    try
                    {
                        var res = new List<AirData>();
                        answer = JsonConvert.DeserializeObject<Answer>(fullJson);
                        res = answer.ConvertToAirData();
                        foreach (var VARIABLE in res)
                      {
                       Console.WriteLine(VARIABLE);     
                        }
                    }
                    catch (NullReferenceException e)
                    {
                        Console.WriteLine("Ничего нету");
                        throw;
                    }
                }
            }
            response.Close();
            Console.WriteLine("Запрос выполнен");
            Console.Read();
        } 
READ ALSO
Как сделать ajax запрос в UrlAction?

Как сделать ajax запрос в UrlAction?

У меня на странице есть две переменные

219
Как изменить ContentControl изнутри, в UserControl

Как изменить ContentControl изнутри, в UserControl

Только пытаюсь разобраться с Wpf MVMMЕсть такая разметка

198
The INSERT statement conflicted with the FOREIGN KEY constraint

The INSERT statement conflicted with the FOREIGN KEY constraint

Personcs (сущность персоны):

181
Правильное сохранение даты

Правильное сохранение даты

возникла проблема с сохранением датыГенерирую дату, путем добавления к текущей дате и времени двух минут

202