【问题标题】:Newtonsoft.Json deserializing multiple objects from streamNewtonsoft.Json 从流中反序列化多个对象
【发布时间】: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 对象。

【问题讨论】:

    标签: c# json json.net


    【解决方案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 行比较长)
    • 这是使用流。你可以使用Read instrad of ReadLine。你能发布一个更准确的例子吗?
    • 您的解决方案迫使我分配大字符串(整个 json 在一行上,并且可能非常大)。我想使用StreamReaderJsonTextReader,但它们都是缓冲阅读器,这意味着我不能交替使用它们。我现在几乎可以工作的解决方案需要我实现非缓冲的“StreamReader”,然后在 JsonTextReader 中使用。完成后我会发布它。但也许有更好的方法。
    • 我明白了。您应该在问题中提到大字符串的问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2018-05-02
    • 2014-05-04
    • 1970-01-01
    相关资源
    最近更新 更多