【发布时间】:2015-02-21 23:40:45
【问题描述】:
当 json 之间有其他文本时,如何从流中反序列化多个 json 对象。 在流中我有以下内容:
Stuff that is not JSON
{"a": 1, "b": 2}
Stuff that is not JSON either
{"a": 3, "b": 4}
我想解析出这两个 json 对象。
【问题讨论】:
当 json 之间有其他文本时,如何从流中反序列化多个 json 对象。 在流中我有以下内容:
Stuff that is not JSON
{"a": 1, "b": 2}
Stuff that is not JSON either
{"a": 3, "b": 4}
我想解析出这两个 json 对象。
【问题讨论】:
由于这不是原生 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,尽管您可以将其解析为您拥有的任何强类型。
【讨论】:
Read instrad of ReadLine。你能发布一个更准确的例子吗?
StreamReader 和JsonTextReader,但它们都是缓冲阅读器,这意味着我不能交替使用它们。我现在几乎可以工作的解决方案需要我实现非缓冲的“StreamReader”,然后在 JsonTextReader 中使用。完成后我会发布它。但也许有更好的方法。