从流中加载多个连接的JSON对象
我读了几个类似的问题,但没有发现任何与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流,我需要知道要读取它的消息的大小。 我决定在每条消息之前编写带有size
和message type
小标题,因此我可以将标题读入一个小缓冲区,获取以下消息的大小然后完全读取它。
您可以通过将JsonReader上的SupportMultipleContent设置为true来实现:
使用JsonReader读取多个片段
如果使用该设置使用JObject.Load时出现问题,请改用JsonConvert.DeserializeObject。