C# 如何在串行端口上写入结构?

C# 如何在串行端口上写入结构?,c#,serialization,serial-port,C#,Serialization,Serial Port,我有以下结构 我需要将整个结构写入串行端口 串行端口连接如下所示: 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方法允许我写入字符串数据,如何通过端口传递此结构内容?我必须将数据转换为字

我有以下结构

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

串行端口连接如下所示:

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方法允许我写入字符串数据,如何通过端口传递此结构内容?我必须将数据转换为字符串格式吗?如果是,我如何实现它?还有别的办法吗

您可以简单地序列化它,也可以使用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()
获取包含所有结构值的逗号分隔字符串,然后您可以在设备中分隔它。

谢谢,总体逻辑对我有所帮助,我不确定您编写的C#语法。由于我是一名c#用户,所以我采用了您的逻辑并重新编写了相同的代码。我非常感谢您的支持和帮助。非常感谢。下面的示例(重写
ToString()
必须非常易于实现。仅当您使用结构的
.ToString()
时,它将返回以逗号分隔的所有属性。
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)}";
   }
}