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

时间:2015-04-06 18:36:19

标签: c# json json.net

我读了几个类似的问题,但没有发现任何与JObject有关的问题。这是问题所在:我有一个带有连接JSON对象的Stream,即:

{"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编写小标题,这样我就可以将标题读入一个小缓冲区,获取以下消息的大小然后完全读取它。

1 个答案:

答案 0 :(得分:4)

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

Read Multiple Fragments With JsonReader

如果将JObject.Load与该设置一起使用时出现问题,请改用JsonConvert.DeserializeObject。