我读了几个类似的问题,但没有发现任何与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流,我需要知道消息的大小才能读取它。我决定在每条消息之前用size
和message type
写一个小标题,这样我就可以将标题读取到一个小缓冲区中,得到下面消息的大小,然后完全读取它。
您可以通过将JsonReader上的SupportMultipleContent设置为true:来实现这一点
使用JsonReader读取多个片段
如果使用JObject.Load有问题,请使用JsonConvert.DeserializeObject。