C#使用json串口通讯
时间: 2025-01-01 14:15:06 浏览: 12
### C# 实现 JSON 格式的串口通讯
为了实现在C#中通过串口进行JSON格式的数据通信,可以基于现有的异步串口通信框架来构建。这涉及到创建专门用于处理JSON对象的发送和接收逻辑。
#### 定义数据模型
首先定义要传输的数据结构,这里采用`DataContract`属性标记类以便于序列化:
```csharp
using System.Runtime.Serialization;
[DataContract]
public class DataModel {
[DataMember(Name="id")]
public int Id { get; set; }
[DataMember(Name="value")]
public string Value { get; set; }
}
```
#### 序列化与反序列化工具方法
接着编写辅助函数来进行JSON字符串与其他类型的转换操作:
```csharp
using Newtonsoft.Json;
// ...
private static T DeserializeJson<T>(string jsonText) where T : new() {
return JsonConvert.DeserializeObject<T>(jsonText);
}
private static string SerializeToJson(object obj) {
return JsonConvert.SerializeObject(obj, Formatting.None,
new JsonSerializerSettings{
NullValueHandling = NullValueHandling.Ignore
});
}
```
#### 修改原有的发送功能支持JSON
调整之前的`SendData`函数使其能够接受任意类型参数并通过JSON形式发出:
```csharp
private static void SendJsonData(object dataObject) {
try {
if (_serialPort != null && _serialPort.IsOpen) {
var jsonDataString = SerializeToJson(dataObject);
_serialPort.WriteLine(jsonDataString);
Console.WriteLine($"JSON Data Sent: {jsonDataString}");
}
} catch (Exception ex) {
Console.WriteLine($"Error in SendJsonData: {ex.Message}");
}
}
```
#### 接收端解析接收到的信息
当从串口接收到消息时,假设每条完整的JSON记录是以换行符结束,则可以在读取回调里加入如下代码片段完成对接收到的内容做进一步加工:
```csharp
private static StringBuilder receivedBuffer = new();
private static void OnDataReceived(object sender, SerialDataReceivedEventArgs e) {
while(_serialPort.BytesToRead > 0){
char c = (char)_serialPort.ReadChar();
if(c == '\n'){
ProcessIncomingMessage(receivedBuffer.ToString());
receivedBuffer.Clear(); // 清空缓冲区准备下一条消息
}else{
receivedBuffer.Append(c);
}
}
}
private static void ProcessIncomingMessage(string message) {
try {
var incomingData = DeserializeJson<DataModel>(message);
Console.WriteLine($"Received ID:{incomingData.Id}, Value:'{incomingData.Value}'");
}catch(JsonSerializationException jse){
Console.WriteLine($"Failed to parse JSON due to error: {jse.Message}");
}catch(Exception ex){
Console.WriteLine($"Unexpected exception occurred during processing incoming messages: {ex.Message}");
}
}
```
以上实现了基本的JSON格式串口通讯机制,在实际项目中可能还需要考虑更多细节比如错误重试策略、超时控制等[^1]。
阅读全文