.NET Core 3.0 의 새로운 JSON API 에 대한 자세 한 설명

8225 단어 .NETCore3.0JSON
왜 새로운 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 데 이 터 를 조작 하여 저 분배 의 특징 을 가지 기 때문에 스루풋 과 메모리 사용 상황 을 크게 개선 할 수 있다. 
그러나 새로운 JSON API 의 특성 은 그리 풍부 하지 않 고 일부 JSON.NET 이 가지 고 있 는 특성 은 아직 지원 되 지 않 는 다. 
예시  
JSON 예제 파일 을 마음대로 찾 았 습 니 다. 

이 파일 에 대해 속성 을 수정 해 야 합 니 다:

Utf8JsonReader  
먼저 사용 하 다  Utf8JsonReader  JSON 파일 을 읽 으 러 왔 습 니 다. 
Utf8JsonReader   파일 이나 stream 을 읽 지 않 습 니 다.Span 데이터 형식 을 읽 습 니 다. 
직접 코드 올 리 기:

Main 방법 에서,우 리 는 File.ReadAllBytes 를 사용 하여 sample.json 파일 에서 읽 는 수 형식 을 byte[]로 한 다음,AsSpan 이라는 확장 방법 을 통 해 그것 을 Span데이터 형식 으로 바 꾸 어 전달 합 니 다.  Utf8JsonReader  JSON 의 reader 를 만 들 기 위 한 구조 함수 입 니 다. 
다음은 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 데이터 의 문자열
  • Utf 8JsonReader  
  • OnlySpan를 읽 으 십시오.JSON 데이터 가 포함 되 어 있 습 니 다.  간단하게 제 이 슨 파일 을 문자열 로 읽 어서 Deserialize 방법 에 전달 합 니 다. 

    그리고 나 서 나 는 반전 행 화 된 속성 데 이 터 를 출력 하려 고 했다.하지만 성공 하지 못 할 것 이다.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 :  
  • Utf 8JsonReader -  읽 기 동작,빠 름,저급 
  • Utf 8JsonWriter -  쓰다 
  • JsonDocument -  DOM 기반,빠 른 속도 
  • Json Seriliazer -  직렬 화/역 직렬 화,빠 름 
  • 그리고 JSON.NET  여전히 지지 받다.  
    .NET Core 3.0 의 새로운 JSON API 에 대한 상세 한 설명 은 여기까지 입 니 다.더 많은 관련.NET Core 3.0 JSON 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기