Данные входящие данные датчика JSONC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Данные входящие данные датчика JSON

Сообщение Anonymous »

Я работаю над приложением клиентского сервера, где клиентская программа - Python, а серверная программа - C#. Сервер начинает получать данные датчика, как показано в приведенном ниже формате < /p>

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

{"ACP": 15, "AliveCnt": 6, "CPDC": 126, "CPS": 14, "DP": 1, "PPS": 2, "SMS": 1, "TCPS": 0, "CATGORY0": 3, "CATGORY1": 9, "CATGORY2": 1, "CATGORY3": 6, "ERRCOD0": 15, "ERRCOD1": 6, "ERRCOD2": 2, "ERRCOD3": 4, "INTFACE0": 0, "INTFACE1": 0, "INTFACE2": 0, "INTFACE3": 0, "SEVRTY0": 0, "SEVRTY1": 1, "SEVRTY2": 1, "SEVRTY3": 2, "MSRDATT": 47}
< /code>
Проблема возникает при попытке десериализовать данные с помощью JSON. Приведенный выше вывод не является действительным форматом JSON. Я хочу преобразовать вышеупомянутый выход в следующем формате < /p>
"{\"ACP\": 15, \"AliveCnt\": 6, \"CPDC\": 126, \"CPS\": 14, \"DP\": 1, \"PPS\": 2, \"SMS\": 1, \"TCPS\": 0, \"CATGORY0\": 3, \"CATGORY1\": 9, \"CATGORY2\": 1, \"CATGORY3\": 6, \"ERRCOD0\": 15, \"ERRCOD1\": 6, \"ERRCOD2\": 2, \"ERRCOD3\": 4, \"INTFACE0\": 0, \"INTFACE1\": 0, \"INTFACE2\": 0, \"INTFACE3\": 0, \"SEVRTY0\": 0, \"SEVRTY1\": 1, \"SEVRTY2\": 1, \"SEVRTY3\": 2, \"MSRDATT\": 47}";
< /code>
Ниже приведен код сервера, который получает и десериализует входящие данные < /p>
namespace WinFormsAppSocket
{
public partial class Form1 : Form
{
TcpListener server = null;

public class Class1
{
public int ACP { get; set; }
public int AliveCnt { get; set; }
public int CPDC { get; set; }
public int CPS { get; set; }
public int DP { get; set; }
public int PPS { get; set; }
public int SMS { get; set; }
public int TCPS { get; set; }
public int CATGORY0 { get; set; }
public int CATGORY1 { get; set; }
public int CATGORY2 { get; set; }
public int CATGORY3 { get; set; }
public int ERRCOD0 { get; set; }
public int ERRCOD1 { get; set; }
public int ERRCOD2 { get; set; }
public int ERRCOD3 { get; set; }
public int INTFACE0 { get; set; }
public int INTFACE1 { get; set; }
public int INTFACE2 { get; set; }
public int INTFACE3 { get; set; }
public int SEVRTY0 { get; set; }
public int SEVRTY1 { get; set; }
public int SEVRTY2 { get; set; }
public int SEVRTY3 { get; set; }
public int MSRDATT { get; set; }

}
private void ThreadProc()
{
Debug.WriteLine("Thread Started");

try
{
// Set the TcpListener on port 13000.
Int32 port = 65223;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");

// TcpListener server = new TcpListener(port);
//server = new TcpListener(localAddr, port);
server = new TcpListener(localAddr, port);
// Start listening for client requests.
server.Start();
Debug.WriteLine("Server has started.Waiting for clients...");
// Buffer for reading data
Byte[] bytes = new Byte[256];
String data = null;

while (true)
{

Debug.WriteLine("Waiting for a connection...  ");

// Perform a blocking call to accept requests.
// You could also use server.AcceptSocket() here.
using TcpClient client = server.AcceptTcpClient();

Debug.WriteLine("Connected with client!");

data = null;

// Get a stream object for reading and writing
NetworkStream stream = client.GetStream();

int i;

// Loop to receive all the data sent by the client.
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{

// Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);

Debug.WriteLine(data);
Class1? m = JsonSerializer.Deserialize(data);
Debug.WriteLine("Deserialized value", m.AliveCnt);
textBox1.Text = m.AliveCnt.ToString();

}

}

}
catch (SocketException e)
{
Debug.WriteLine("SocketException: {0}", e);

}
finally
{
server.Stop();
}

}

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
Debug.WriteLine("Hello from Form1....");
Thread th = new Thread(ThreadProc);
th.IsBackground = true;
th.Start();
}

}
< /code>
} < /p>
Клиентская часть кода отвечает за отправку данных < /p>
data = {"ACP": data[0], "AliveCnt": data[1], "CPDC": data[2], "CPS": data[3],"DP": data[4],"PPS": data[5],"SMS": data[6],"TCPS": data[7],
"CATGORY0": data[8],"CATGORY1": data[9],"CATGORY2": data[10],"CATGORY3": data[11],"ERRCOD0": data[12],"ERRCOD1": data[13],"ERRCOD2": data[14],
"ERRCOD3": data[15],"INTFACE0": data[16],"INTFACE1": data[17],"INTFACE2": data[18],"INTFACE3": data[19],"SEVRTY0": data[20],"SEVRTY1": data[21],
"SEVRTY2": data[22],"SEVRTY3": data[23],"MSRDATT": data[24]}
print("print", data)

try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(str(json.dumps(data)).encode())
s.close()
except:
print("Can't open port")
pass
< /code>
Ошибка сообщена в следующей строке < /p>
Class1? m = JsonSerializer.Deserialize(data);
< /code>
Сгенерированная ошибка, показанная ниже. < /p>
    Exception thrown: 'System.Text.Json.JsonException' in System.Text.Json.dll
An unhandled exception of type 'System.Text.Json.JsonException' occurred in System.Text.Json.dll
'47' is an invalid end of a number. Expected a delimiter. Path: $.MSRDATT | LineNumber: 0 | BytePositionInLine: 256.
направляйте меня, чтобы узнать проблему

Подробнее здесь: https://stackoverflow.com/questions/796 ... ensor-data
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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