使用多行处理 Json 反序列化

Handling Json Deserialization with multiple lines

我的应用程序需要 Json 个文件以两种不同的结构出现。一个文件,其中每一行都是一个完整的 json,另一个文件是一个 Json 文件。 例如:一个文件将具有此结构

{"Logging": {"LogLevel": {"Default": "Warning", "System": "Warning", "Microsoft": "Warning" }}}

和具有此结构的其他文件:

{"Logging": {"LogLevel": {"Default": "Warning",
      "System": "Warning",
      "Microsoft": "Warning"
    }}}

我下面的代码进行了反序列化,它适用于第一个结构,但对其他文件失败,说错误

Unexpected end when reading token. Path ''."}

我的代码:

foreach( var line in lines )
            {
   var data = JsonConvert.DeserializeObject<JObject>( line);}

我想知道如何解决这个问题,以便它处理两种类型的文件?

您正在将 JSON 文件的每一行读入试图解析每一行的数据变量。

因此它尝试解析第 1 行,即 {"Logging": {"LogLevel": {"Default": "Warning",。由于这不是有效的 JSON 对象,因此解析失败。

而是使用 File.ReadAllText 将整个文件读入一个字符串,然后解析该字符串。或者简单地将字符串数组连接回单个字符串:

 var data = JsonConvert.DeserializeObject<JObject>(string.Join(Environment.NewLine,lines));}