使用JSON.NET解析JSON对象流
JSON.NET 提供了一种便捷的方案来反序列化连接的JSON对象流。在实现此目标的过程中,您可能会遇到如何在每次反序列化后推进读取器的问题。
您提供的代码片段尝试反序列化JSON对象流,但由于意外的标记错误而失败。要解决此问题,请按如下方式修改代码:
<code class="language-csharp">public IEnumerable<TResult> ReadJson<TResult>(Stream stream) { var serializer = new JsonSerializer(); using (var reader = new StreamReader(stream)) using (var jsonReader = new JsonTextReader(reader)) { jsonReader.SupportMultipleContent = true; while (jsonReader.Read() && !jsonReader.EOF) // 添加EOF检查 { try { yield return serializer.Deserialize<TResult>(jsonReader); } catch (JsonReaderException ex) { // 处理JSON读取异常,例如跳过无效的JSON对象 Console.WriteLine($"JSON解析错误: {ex.Message}"); // 可选:在此处添加日志记录或其他错误处理机制 } } } }</code>
在此修改后的代码中,循环已调整为从流中读取每个JSON对象,然后生成反序列化的结果。重要的是,在提供的流打开时迭代返回的IEnumerable<TResult>
,以防止对象处置错误。 此外,添加了!jsonReader.EOF
检查以避免无限循环,并添加了try-catch
块来处理潜在的JsonReaderException
,例如遇到无效的JSON对象。
以下是一个示例:
<code class="language-csharp">using (var stream = /* some stream */) { IEnumerable<MyClass> result = ReadJson<MyClass>(stream); foreach (var item in result) { Console.WriteLine(item.MyProperty); } }</code>
有关使用JsonReader处理多个JSON片段的更多信息,请参阅JSON.NET官方文档。
以上是如何使用 JSON.NET 解析 JSON 对象流?的详细内容。更多信息请关注PHP中文网其他相关文章!