C#——串口接收JSON数据处理
待处理的json数据
{
"altogether_time": "32",
"measure_deep": "5",
"measure_speed": "7",
"origin_distance": "9",
"relative_value": "0.2",
"signal_num": "8",
"water_deep": "2"
}
下面是串口接收并解析这些数据
//定义一些字符串变量
private string altogether_time = string.Empty; //总历时
private string measure_deep = string.Empty; //测深
private string measure_speed = string.Empty; //测速
private string origin_distance = string.Empty; //起点距
private string relative_value = string.Empty; //相对值
private string signal_num = string.Empty; //信号数
private string water_deep = string.Empty; //水深
//定义一个类
public class TOKENValue
{
public string altogether_time { get; set; }
public string measure_deep { get; set; }
public string measure_speed { get; set; }
public string origin_distance { get; set; }
public string relative_value { get; set; }
public string signal_num { get; set; }
public string water_deep { get; set; }
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) //串口中断接收函数
{
try
{
if(this.serialPort1.IsOpen)
{
Thread.Sleep(300); //延时有必要等待全部接收到
//获取串口数据
byte[] receiveData = new byte[this.serialPort1.BytesToRead];
this.serialPort1.Read(receiveData, 0, receiveData.Length);
string temp = Encoding.ASCII.GetString(receiveData, 0, receiveData.Length);
temp = temp.Replace("\\", "");//使用替换的方法去掉"\\","\{","}\"
temp = temp.Replace("\"{", "{");
temp = temp.Replace("}\"", "}");
TOKENValue rValue = new TOKENValue();//实例化一个对象
try
{
rValue = JsonConvert.DeserializeObject<TOKENValue>(temp);
}
catch (Exception ex)
{
MessageBox.Show("错误提示:" + ex.ToString());
return;
}
altogether_time = rValue.altogether_time;//获取到值付给我们的变量
measure_deep = rValue.measure_deep;
measure_speed = rValue.measure_speed;
origin_distance = rValue.origin_distance;
relative_value = rValue.relative_value;
signal_num = rValue.signal_num;
water_deep = rValue.water_deep;
Console.WriteLine(altogether_time );//打印变量是32
Console.WriteLine(measure_deep );
Console.WriteLine(measure_speed );
Console.WriteLine(origin_distance );
Console.WriteLine(relative_value );
Console.WriteLine(signal_num );
Console.WriteLine(water_deep );
}
}
catch
{
return;
}