JSON.NET을 사용하여 JSON 개체 스트림 역직렬화
많은 시나리오에서 JSON 데이터는 분리 없이 개별 개체의 스트림으로 제공됩니다. . 이는 JSON.NET을 사용하여 해당 데이터를 IEnumerable
초기 접근 및 오류
다음을 사용하여 스트림을 역직렬화하려고 시도합니다. 코드에서 오류가 발생했습니다.
var serializer = new JsonSerializer(); serializer.CheckAdditionalContent = false; using (var reader = new StreamReader(stream)) using (var jsonReader = new JsonTextReader(reader)) { reader.SupportMultipleContent = true; reader.Read(); while (reader.TokenType != JsonToken.None) { yield return serializer.Deserialize<TResult>(reader); } }
오류는 예상치 못한 결과를 나타냅니다. 하나의 객체를 역직렬화한 후 객체의 끝:
Newtonsoft.Json.JsonSerializationException: Unexpected token while deserializing object: EndObject. Path '', line 1, position 55.
해결책: 고급 판독기 처리
이 문제를 해결하려면 각 후 수동으로 JSON 판독기를 발전시켜야 합니다. 역직렬화에 성공했습니다. 수정된 루프 구조는 다음과 같습니다.
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()) { yield return serializer.Deserialize<TResult>(jsonReader); } } }
사용 및 고려 사항
이 방법을 사용하려면 JSON 개체가 포함된 오픈 스트림을 제공하세요. 결과 IEnumerable
예:
using (var stream = /* some stream */) { IEnumerable<MyClass> result = ReadJson<MyClass>(stream); foreach (var item in result) { Console.WriteLine(item.MyProperty); } }
이 예에는 JSON.NET 웹사이트의 데모 링크와 DotNet Fiddle의 기능적 예도 포함되어 있습니다.
위 내용은 JSON.NET을 사용하여 JSON 개체 스트림을 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!