从串口读取连续数据流并反序列化JSON对象

时间:2016-02-05 10:03:38

标签: c# .net json serialization uwp

在UWP应用程序中,我想从串口读取连续数据流。输入流包含连续的json对象,如下所示:

{
  "sensor": "gps",
  "time": 1351824120,
  "data": [
    48.75608,
    2.302038
  ]
}

{
  "sensor": "gps",
  "time": 1351824120,
  "data": [
    48.75608,
    2.302038
  ]
}

{
  "sensor": "gps",
  "time": 1351824120,
  "data": [
    48.75608,
    2.302038
  ]
} 

...

要收听端口,请使用

var dataReaderObject = new DataReader(SerialPort.InputStream);

我还使用了一个任务来等待serialPort.InputStream上的数据。

Task<UInt32> loadAsyncTask = dataReaderObject.LoadAsync(ReadBufferLength);

但问题是,我不知道一个JSON对象的长度。如何读取或缓冲流,以便我可以取消JSON流?类似于load data from "{" to "}"

有没有最好的做法呢?

修改

我也可以影响数据发送方。也许最好以更好的格式发送serali数据?您有什么建议来改善发送的数据吗?

2 个答案:

答案 0 :(得分:1)

流包含对象之间的空行。所以,寻找两个连续的换行符,并解析到这一点。

答案 1 :(得分:1)

您可以通过计算'{'大括号的总数和'}'大括号的总数来实现此目的。

步骤1:声明一个整数来存储计数。

步骤2:现在遇到'{'

时立即递增整数

步骤3:遇到'}'

后立即减小整数

步骤4:当计数器变为0时,获取字符位置并使用开始和结束位置从字符串中获取子字符串。 (这是你想要的JSON)。

步骤5:反序列化Json。