Получение JSON закодированной информации из другой программы на мой GUI - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужно получить JSON информацию из другой программы и отобразить ее в моем GUI. Текущий код у меня просто вылетает программа. Я исследовал проблему, возникшую у меня в течение недели, и не могу найти решение.

Этот фрагмент кода должен получать информацию из программы и десериализовать данные.

public void TelemetryUpdateReceived()
{
        TelemetryUpdate tUpdate;
        NetworkStream stream = client.GetStream();
        byte[] buffer = new byte[256];
        JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();

        while (client != null)
        {
            int num_bytes = 0;
            num_bytes = stream.Read(buffer, 0, 256);
            string message = Encoding.ASCII.GetString(buffer, 0, num_bytes);
            DisplayMessages(message);

            tUpdate = javaScriptSerializer.Deserialize<TelemetryUpdate>(message);
            data.Altitude = tUpdate.Altitude;
            data.Elevator = tUpdate.ElevatorPitch;
            data.Pitch = tUpdate.Pitch;
            data.Speed = tUpdate.Speed;
            data.Throttle = tUpdate.Throttle;
            data.VerticalSpeed = tUpdate.VerticalSpeed;
            data.WarningCode = tUpdate.WarningCode;
        } 
}

У меня также есть класс для получения и установки данных.

class getData
{
        public double Altitude { get; set; }
        public double Speed { get; set; }
        public double Pitch { get; set; }
        public double VerticalSpeed { get; set; }
        public double Throttle { get; set; }
        public double Elevator { get; set; }
        public int WarningCode { get; set; }
}

struct TelemetryUpdate
{
        public double VerticalSpeed;
        public double Throttle;
        public double Altitude;
        public double Speed;
        public double Pitch;
        public double ElevatorPitch;
        public int WarningCode;
}

РЕДАКТИРОВАТЬ: я забыл добавить скриншот сообщения об ошибке Сообщение об ошибке I Get

РЕДАКТИРОВАТЬ 2: Это код, который я использую для отображения данных

private void DisplayMessages(string messageJ)
    {
        ListViewItem listViewItem = new ListViewItem(new string[] { messageJ });
        this.lstBoxLatestData.Items.Insert(0, listViewItem);
        if (this.lstBoxLatestData.Items.Count > 40)
        {
            lstBoxLatestData.Items.RemoveAt(lstBoxLatestData.Items.Count - 1);
        }

    }

После установки точки останова это пример JSON, который вызвал исключение с примитивом "Invalid JSON "сообщение:

{"Altitude":-1.2874016160000004,"Speed":0,"Pitch":0,"VerticalSpeed":0,"Throttle":0,"ElevatorPitch":0,"WarningCode":0}
{"Altitude":-1.2874016160000004,"Speed":0,"Pitch":0,"VerticalSpeed":0,"Throttle":0,"ElevatorPitch":0,"WarningCode":0}

1 Ответ

0 голосов
/ 21 апреля 2020

Это недействительно JSON. Это должно быть:

  • Отдельный элемент
{
    "Altitude":-1.2874016160000004,
    "Speed":0,
    "Pitch":0,
    "VerticalSpeed":0,
    "Throttle":0,
    "ElevatorPitch":0,
    "WarningCode":0
}
  • Массив объектов.

Примечание: в этом Если вы также должны изменить структуру C# для хранения массива, в последних версиях Visual Studio есть функция «Вставить JSON как классы», которую вы можете использовать

[
    {
        "Altitude":-1.2874016160000004,
        "Speed":0,
        "Pitch":0,
        "VerticalSpeed":0,
        "Throttle":0,
        "ElevatorPitch":0,
        "WarningCode":0
    },
    {
        "Altitude":-1.2874016160000004,
        "Speed":0,
        "Pitch":0,
        "VerticalSpeed":0,
        "Throttle":0,
        "ElevatorPitch":0,
        "WarningCode":0
    }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...