在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数据?您有什么建议来改善发送的数据吗?
答案 0 :(得分:1)
流包含对象之间的空行。所以,寻找两个连续的换行符,并解析到这一点。
答案 1 :(得分:1)
您可以通过计算'{'大括号的总数和'}'大括号的总数来实现此目的。
步骤1:声明一个整数来存储计数。
步骤2:现在遇到'{'
时立即递增整数步骤3:遇到'}'
后立即减小整数步骤4:当计数器变为0时,获取字符位置并使用开始和结束位置从字符串中获取子字符串。 (这是你想要的JSON)。
步骤5:反序列化Json。