gpt4 book ai didi

c# - 从流中加载多个串联的 JSON 对象

转载 作者:行者123 更新时间:2023-11-30 15:26:28 26 4
gpt4 key购买 nike

我读了几个类似的问题,但没有找到与 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 的小头,这样我就可以将头读入一个小缓冲区,得到下面消息的大小,然后读取完全是。

最佳答案

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

Read Multiple Fragments With JsonReader

如果在该设置下使用 JObject.Load 时出现问题,请改用 JsonConvert.DeserializeObject。

关于c# - 从流中加载多个串联的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29477352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com