JSON-Objektstream mit JSON.NET analysieren
JSON.NET bietet eine praktische Lösung zum Deserialisieren eines verbundenen Streams von JSON-Objekten. Um dies zu erreichen, könnten Sie auf die Frage stoßen, wie Sie den Leser nach jeder Deserialisierung vorantreiben können.
Der von Ihnen bereitgestellte Codeausschnitt versucht, einen Stream von JSON-Objekten zu deserialisieren, schlägt jedoch aufgrund eines unerwarteten Tokenfehlers fehl. Um dieses Problem zu beheben, ändern Sie den Code wie folgt:
<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>
In diesem geänderten Code wurde die Schleife angepasst, um jedes JSON-Objekt aus dem Stream zu lesen und dann das deserialisierte Ergebnis zu erzeugen. Es ist wichtig, das zurückgegebene IEnumerable<TResult>
zu durchlaufen, während der bereitgestellte Stream geöffnet ist, um Fehler bei der Objektentsorgung zu vermeiden. Darüber hinaus wurde eine !jsonReader.EOF
-Prüfung hinzugefügt, um Endlosschleifen zu vermeiden, und ein try-catch
-Block wurde hinzugefügt, um potenzielle JsonReaderException
wie das Auftreffen eines ungültigen JSON-Objekts zu behandeln.
Hier ist ein Beispiel:
<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>
Weitere Informationen zur Verwendung von JsonReader zur Verarbeitung mehrerer JSON-Fragmente finden Sie in der offiziellen JSON.NET-Dokumentation.
Das obige ist der detaillierte Inhalt vonWie analysiere ich einen Stream von JSON-Objekten mit JSON.NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!