[Flutter] Json Serializable 사용하기(Json 직렬화)
프로젝트를 할때마다 매번 서버에서 받아오는 데이터를 클래스로 처리할때마다
Json 직렬화를 일일히 작성해야하는 번거로움이 많았고
오타 하나로 데이터를 받지 못해 에러가 나는 상황도 종종 있었는데
Json Serializable 패키지를 사용하면
실수 및 번거로움을 해결해 작업 속도 향상에 도움을 줍니다.
https://pub.dev/packages/json_serializable
json_serializable | Dart package
Automatically generate code for converting to and from JSON by annotating Dart classes.
pub.dev
설치하기
flutter pub add json_annotation dev:build_runner dev:json_serializable
작업 중인 프로젝트 폴더에서 쉘에서 해당 명령어 실행
1. 직렬화할 클래스 생성
- 기존 Json 직렬화 클래스
2. 직렬화 패키지 적용
- part '[파일명].g.dart' 를 추가하기
- 클래스 위에 @JsonSerializable() 어노테이션 추가
사진과 같이 존재하지 않는 파일 및 메서드로 에러가 발생하는게 정상입니다.
생성한 적이 없기 떄문에
- 프롬프트에 밑에 해당하는 명령어 입력
dart run build_runner build
위와 같이 뜨면 성공입니다.
이제 같은 폴더에 member.a.dart 파일이 생성되었습니다.
3. 직렬화 패키지 사용
- fromJson 및 toJson 메서드를 해당 코드와 같이 추가
클래스안에 만약 또 다른 클래스가 있다면
@JsonSerializable() 파라미터에
explicitToJson : true 로 주게 되면 안에 다른 클래스가 있음을 파악합니다
이렇게 하면 끝입니다.
Json Serializable에서 지원하는 변수는
일반 타입 변수 | BigInt, bool, DateTime, double, Duration, Enum, int, Iterable, List, Map, num, Object, Record, Set, String, Uri |
콜렉션 타입 변수 | Iterable, List, Map, Record, Set |
또한 Map의 경우 키값이 BigInt, DateTime, Enum, int, Object, String, Uri 이 타입 중 하나여야 한다고 합니다.
만약 지원하지 않는 변수가 있을 경우에는 커스텀을 할 수 있는데 아직 쓸일이 없어서..