从流中加载多个连接的JSON对象



我读了几个类似的问题,但没有发现任何与JObject相关的问题。问题是:我有一个带有级联JSON对象的流,即:

{"key1":"value1"}{"key2":"value2"}{"key3":"value3"}

现在,我想把这些对象一个接一个地读到JObject中。以下是我尝试的方法:

public class JsonStreamReader : JsonTextReader
{
    public JsonStreamReader(Stream s) : base(new StreamReader(s)) {}
}
private void LoadJson(Stream s)
{
    var r = new JsonStreamReader(s) { SupportMultipleContent = true };
    var obj = JObject.Load(r);
    // ... get data from JObject ...
}

这里的问题是JObject.Load()从流中读取所有可用的数据,但只解析第一个对象,并丢弃所有其他对象。我该如何处理?

在XY问题的情况下(为什么我需要它):我想通过TCP流传输JSON消息。因为我使用原始TCP流,我需要知道消息的大小才能读取它。我决定在每条消息之前用sizemessage type写一个小标题,这样我就可以将标题读取到一个小缓冲区中,得到下面消息的大小,然后完全读取它。

您可以通过将JsonReader上的SupportMultipleContent设置为true:来实现这一点

使用JsonReader读取多个片段

如果使用JObject.Load有问题,请使用JsonConvert.DeserializeObject。

相关内容

  • 没有找到相关文章

最新更新