Newtonsoft.Json从流中反序列化多个对象

3
如何从流中反序列化多个json对象,当json之间有其他文本时。
在流中我有以下内容:
Stuff that is not JSON

{"a": 1, "b": 2}

Stuff that is not JSON either

{"a": 3, "b": 4}

我希望你能帮我解析这两个JSON对象。
1个回答

1

既然这不是原生的JSON格式,你需要手动进行一些劳动工作,但应该不难。

您可以将流传递到StreamReader中,并跳过前两行:

var streamReader = new StreamReader(yourStream);

for (int i = 0; i < 2; i++)
{
    streamReader.ReadLine();
}

var jsonLine = textFile.ReadLine();
var yourObject = JsonConvert.Deserialize<dynamic>(jsonLine);

对于这两条线路,都需要执行此操作。如果您有一段较长的JSON并且两行之间有一个常数,则可以改用while循环和取模运算。

请注意,我将其解析为dynamic,但您也可以将其解析为任何强类型类型。


谢谢您的回复,但是我想使用流来处理。读取整行的 JSON 会导致性能问题,我想要避免这种情况发生。(因为这些 JSON 行相当长) - ppiotrowicz
这是使用流的方式工作。您可以使用Read而不是ReadLine。 请问您能否提供一个更准确的示例? - Yuval Itzchakov
你的解决方案让我不得不分配大字符串(整个 JSON 在一行上,可能非常大)。我本来想使用 StreamReaderJsonTextReader,但它们都是带缓冲的读取器,这意味着我不能交替使用它们。我的解决方案现在几乎可以工作了,但需要我实现一个非缓冲的 "StreamReader",然后在 JsonTextReader 中使用它。完成后我会发布它。但也许有更好的方法。 - ppiotrowicz
我明白了。你应该在问题里提到大字符串的问题。 - Yuval Itzchakov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接