【发布时间】:2016-05-15 06:11:51
【问题描述】:
在 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 数据会更好?您对改进发送的数据有什么建议吗?
【问题讨论】:
-
如果你可以影响发送方,为什么不只包括将要发送的 JSON 的长度?
-
@WiredPrairie 发送 JSON 直到设备关闭。我不知道提前的长度。我可以发送每个 JSON 对象的长度。但是我也必须阅读这个“长度值”。我该怎么做?
-
如果你不能这样做,你需要构建一个状态机来不断连接结果,直到你检测到某种标记(可能是长度,但也可能是空行等)。
-
我在 Raspberry Pi 和 Windows IoT Core 上遇到了同样的问题。我能想象的最简单的解决方案是将 ReadBufferLength 的值设置为 1 并将每个值与某个标记进行比较。在我的情况下,我有一个来自另一个设备的 JSON 数组,我尝试将当前缓冲区值与“]”字符进行比较以确定流的结尾。但是我的应用程序在尝试使用此类缓冲区时抛出异常(它不显示有关此异常的任何详细信息)。你的问题成功了吗?
标签: c# .net json serialization uwp