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
검사가 추가되었고, 유효하지 않은 JSON 개체가 발생하는 등의 잠재적인 try-catch
을 처리하기 위해 JsonReaderException
블록이 추가되었습니다.
예는 다음과 같습니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!