如何通过串行端口编写结构?

时间:2018-10-03 05:41:23

标签: c# serialization serial-port

我有以下结构

unsafe public struct usb_board
{
        UInt16 scr_id;
        UInt16 cmd_id;
        uint type;
        UInt16 size;
        UInt16 crc;
        uint [] buffer;
}

我需要将整个结构写入串行端口。

串行端口连接如下:

System.IO.Ports.SerialPort Port = new System.IO.Ports.SerialPort("COM1");
Port.BaudRate = 9600;
Port.Open();
Port.WriteTimeout = 4000;
Port.Write("Some String Data");

port.Write 方法允许我写入字符串数据,如何通过端口传递此结构内容?我是否必须将数据转换为字符串格式?如果是这样,我如何实现它?还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

您可以简单地序列化它,可以使用Json或创建自己的序列化:

string json = Newtonsoft.Json.JsonConvert.SerializeObject(your_object);
System.IO.Ports.SerialPort Port = new System.IO.Ports.SerialPort("COM1");
Port.BaudRate = 9600;
Port.Open();
Port.WriteTimeout = 4000;
Port.Write(json);

如果很难在设备(或任何接收者)中解析json,则可以自己创建序列化:

unsafe public struct usb_board
{
   UInt16 scr_id;
   UInt16 cmd_id;
   uint type;
   UInt16 size;
   UInt16 crc;
   uint[] buffer;
   public override string ToString()
   {
       return $"{scr_id},{cmd_id},{type},{size},{crc},{string.Join(",", buffer)}";
   }
}

然后您可以使用your_object.ToString()来获取包含所有结构值的逗号分隔的字符串,然后可以在设备中将其分隔。