.NET Core 3.0 의 새로운 JSON API 에 대한 자세 한 설명
JSON.NET 다 들 써 봤 고,기 존 버 전의 ASP.NET Core 도 JSON.NET 에 의존 했다.
그러나 이 의존 은 일부 버 전의 문 제 를 일 으 킬 수 있다.예 를 들 어 ASP.NET 코어 의 어떤 버 전 은 JSON.NET 을 사용 해 야 합 니 다. v10,다른 라 이브 러 리 는 JSON.NET 을 사용 해 야 합 니 다. v11 ;아니면 JSON.NET. 새로운 버 전이 나 왔 습 니 다.ASP.NET Core 는 아직 이 버 전 을 지원 할 수 없 지만 이 버 전 을 사용 하려 고 합 니 다.
System.Text.Json
NET Core 에 따라 3.0 의 등장 으로 System.Text.JSon 네 임 스페이스 와 그 아래 에 JSON 을 처리 하 는 클래스 가 나 타 났 습 니 다.
특징.
이 내 장 된 JSON API 는 타고 난 고성능,지 분배 의 특징 을 가지 고 있다.
JSON .NET .NET 사용 안에 있 는 문자열 은 기본 데이터 형식 으로 UTF 16 이 고.NET Core 에 있 는 새로운 JSON 입 니 다. API 는 데이터 원본 UTF 8 형식 을 직접 사용 합 니 다.
새로운 JSON API 는 Span
그러나 새로운 JSON API 의 특성 은 그리 풍부 하지 않 고 일부 JSON.NET 이 가지 고 있 는 특성 은 아직 지원 되 지 않 는 다.
예시
JSON 예제 파일 을 마음대로 찾 았 습 니 다.
이 파일 에 대해 속성 을 수정 해 야 합 니 다:
Utf8JsonReader
먼저 사용 하 다 Utf8JsonReader JSON 파일 을 읽 으 러 왔 습 니 다.
Utf8JsonReader 파일 이나 stream 을 읽 지 않 습 니 다.Span 데이터 형식 을 읽 습 니 다.
직접 코드 올 리 기:
Main 방법 에서,우 리 는 File.ReadAllBytes 를 사용 하여 sample.json 파일 에서 읽 는 수 형식 을 byte[]로 한 다음,AsSpan 이라는 확장 방법 을 통 해 그것 을 Span
다음은 while 순환 을 사용 하여 JSON 데이터 의 모든 Token 을 읽 고 read()방법 을 실행 할 때마다 reader 는 JSON 데이터 의 다음 Token 으로 이동 합 니 다.
Token 은 몇 가지 유형 으로 나 뉘 는데 GetToken Info 방법 은 Token 의 유형 을 판단 하고 설명 적 인 정 보 를 되 돌려 주 는 것 입 니 다.이 안에 모든 유형 이 포함 되 어 있 을 것 입 니 다.이 안에 C\#를 사 용 했 습 니 다. 8 의 switch 표현 식.
실행 프로그램
결 과 는 다음 과 같다.
Sample.json 파일 에 있 는 모든 Token 이 올 바 르 게 표시 되 어 있 습 니 다.
JSon 문서 클래스
JSon Document 는 Utf8JSonReader 기반 입 니 다. 구축 적JsonDocument 분석 가능 JSON 데이터 및 읽 기 전용 문서 개체 모델 생 성 (DOM)무 작위 접근 과 매 거 진 을 지원 하기 위해 모델 을 조회 할 수 있 습 니 다.쓰다 JsonDocument 관례 를 분석 하 다 JSON 유효 부하 및 모든 구성원 방문 비 사용 Json.NET 빠르다. 2-3 배,그리고 합 리 적 인 크기 < 1MB)의 데 이 터 는 배 정 된 양 이 매우 적다.
JSonDocument 는 Span 도 처리 할 수 있 고 Stream 도 처리 할 수 있 습 니 다.
예:
여기 서 나 는 File.OpenRead 를 통 해 json 파일 을 stream 으로 바 꾸 었 다.그리고 JSon Document.Parse 방법 으로 stream 을 JSON 문서 대상 모델 로 해석 합 니 다.
주의 하 세 요.여기 서 저 는 C\#8 의 using var 문법 을 사 용 했 습 니 다.이것 은 나중에 다시 이야기 하 겠 습 니 다.
다음은 이 JSON 문서 대상 모델 의 루트 노드 부터 옮 겨 다 니 기 시작 합 니 다.즉,RootElement 입 니 다.
그리고 루트 라 는 JSonElement 유형의 대상 의 GetProperty 방법 을 통 해 해당 하 는 속성 을 얻 을 수 있 으 며 이 방법 은 연속 으로 사용 할 수 있 습 니 다.
마지막 줄 은 GetString 방법 을 사용 하여 이 속성의 문자열 값 을 얻 습 니 다.
그 다음 에 우 리 는 전체 모델 의 모든 속성 을 재 귀적 으로 호출 하 는 방법 을 쓸 수 있다.
이 방법 은 JSonElement 형식의 대상 을 받 아들 이 고 이 요소 의 속성 을 순환 합 니 다.
현재 속성 이 다른 대상 이 라면 이 방법 을 계속 재 귀적 으로 호출 합 니 다.
그렇지 않 으 면 원본 텍스트 를 출력 합 니 다.
마지막 으로 이 방법 을 호출 합 니 다:
출력 결 과 는:
제 이 슨 파일 의 내용 과 일치 합 니 다.
Utf8JSonWriter 클래스
제 이 슨 파일 을 어떻게 쓰 는 지 연구 해 보 겠 습 니 다.여기 에는 Utf 8JSonWriter 류 를 사용 해 야 합 니 다.
코드 직접 보기:
이 클래스 가 전달 해 야 할 매개 변수 유형 은 Stream 이나 Buffer 입 니 다.즉,Stream 이나 Buffer 에 데 이 터 를 기록 하 는 것 입 니 다.
그러면 buffer 를 제공 합 니 다:
json 데 이 터 를 만 드 는 방법 을 따로 쓰 겠 습 니 다.
매개 변수 유형 은 Utf 8JSonWriter 입 니 다.스마트 힌트 를 통 해 다양한 유형의 데 이 터 를 기록 하 는 방법 을 많이 제공 하 는 것 을 볼 수 있다.
JSON 대상 쓰기
지금 제 이 슨 대상 을 쓰 고 싶 습 니 다.그러면 Write StartObject()부터 시작 해서 Write End Object()로 끝 냅 니 다.
이렇게 되면 실제로 나 는 이미 합 법 적 인 제 이 슨 문 서 를 가지 고 있다.
속성 과 값 쓰기
속성 과 값 을 나 눌 수 있 습 니 다:
속성 과 값 을 동시에 쓸 수 있 습 니 다:
JSON 데이터 보이 기
나 는 먼저 이 내용 을 쓴 다음 에 Main 방법 에서 호출 할 것 이다.
먼저 writer 에 게 내용 flush 를 buffer 에 알려 야 합 니 다.이 buffer 를 사용 하면 writer 의 출력 을 얻 을 수 있 습 니 다.그러면 byte 배열 을 얻 고 이 byte 배열 을 문자열 로 바 꾸 면 콘 솔 에 표시 할 수 있 습 니 다.
실행 해 보기 효과:
큰 문 제 는 없 지만 격식 이 좋 지 않다.
출력 포맷
.NET Core 는 Writer 를 설정 할 수 있 는 JSonWrite r Options 클래스 를 제공 합 니 다.
출력 을 들 여 쓰 고 마지막 으로 이 options 를 Utf 8JSonWriter 의 구조 함수 에 전달 하면 됩 니 다.
다시 실행:
이제 훨씬 예 뻐 졌어 요.
JsonSerializer
앞의 몇 마디 의 내용 은 약간 밑바닥 일 수 있 습 니 다.우 리 는 대부분 C\#의 클래스 를 직렬 화하 거나 JSON 데 이 터 를 C\#클래스 로 바 꾸 거나.NET Core 에서 3.0 에서 우 리 는 JSonSerializer 라 는 종 류 를 사용 하여 이런 일 을 할 수 있다.
예:
아니면 이전에 사 용 된 json 데 이 터 를 사용 합 니까?
그리고 우 리 는 이 파일 에 대응 하 는 두 가지 종 류 를 만들어 야 합 니 다.
역 직렬 화
json Serializer 류 의 Deserialize()방법 으로 json 데 이 터 를 역 주 행 할 수 있 습 니 다.이 방법 은 세 가지 유형의 입력 매개 변 수 를 지원 합 니 다.각각:
JSON 데이터 의 문자열
그리고 나 서 나 는 반전 행 화 된 속성 데 이 터 를 출력 하려 고 했다.하지만 성공 하지 못 할 것 이다.JSON 파일 에 있 는 데이터 의 대소 문자 명명 규범 은 camel casing(이니셜 은 소문 자로 간단하게 이해)을 사용 하기 때문에 기본 적 인 상황 에서 Deserializer 는 Pascal casing 이라는 규범(모든 단어의 이니셜 은 대문자 로 간단하게 이해)의 속성 명 을 찾 습 니 다.
포맷
이 문 제 를 해결 하기 위해 서 는 JSonSerializer Options 클래스 를 사용 해 야 합 니 다.
이러한 인 스 턴 스 를 만 들 고 Property NamingPolicy 를 CamelCase 로 설정 한 다음 이 인 스 턴 스 를 Deserialize 방법의 두 번 째 매개 변수 에 전달 합 니 다.
실행 결과 보기:
이번 엔 문제 없어.
직렬 화
JSon Serializer 도 직렬 화 를 지원 합 니 다.즉,C\#데 이 터 를 JSON 데이터 로 바 꾸 는 것 입 니 다.
여기에 같은 options 를 사 용 했 습 니 다.
실행 결과:
출력 결 과 를 더 예 쁘 게 하려 면 JSonSerializer Options 에서 해당 하 는 설정 을 할 수 있 습 니 다.
이번 출력 결 과 는:
총결산
.NET Core 3.0 의 새로운 JSON 을 정리 해 보도 록 하 겠 습 니 다. API :
.NET Core 3.0 의 새로운 JSON API 에 대한 상세 한 설명 은 여기까지 입 니 다.더 많은 관련.NET Core 3.0 JSON 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2017에서 SQLite를 사용한 Windows Forms 앱 개발Visual Studio 2017에서 SQLite를 사용하여 Windows Forms 앱을 개발해 보았습니다. 아직 서버 탐색기나 TableAdaptor를 사용한 GUI에서의 개발에는 대응하지 않는 것 같습니다. 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.