使用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中文網其他相關文章!