DevBoi

[Flutter] Auto Serializable 본문

[Mobile]/[Flutter]

[Flutter] Auto Serializable

HiSmith 2023. 11. 12. 08:58
반응형

플러터 사용중 자동으로 역직렬화와 직렬화를 가능하게 해주는 라이브러리를 사용해야겠다고 생각했다.

손수 직접 매핑을 해줬는데 이 작업이 상당히 귀찮아 졌다.

dart pub add dev:json_serializable
dev_dependencies: 
  flutter_test: 
    sdk: flutter
  build_runner: ^2.0.0
  json_serializable: ^6.7.1
import 'package:json_serializable/json_serializable.dart';

 

위 작업으로 관련 클래스에서 사용할 수있다.

자동 Factory 메소드를 생성을 해주는데, 직접 매핑을 관여한다.

 

관련되서 사용법은 아래와 같다.

 

아래와 같이 명시만 해놓은 파일이 있다고 가정한다.

import 'package:json_annotation/json_annotation.dart';

part 'kakao_profile.g.dart';

@JsonSerializable()
class KakaoUserProfile{
  int? id;
  String? nickname;
  String? thumbnailImageUrl;


  KakaoUserProfile(int? id,String? nickname,String? thumbnailImageUrl){
    this.id = id;
    this.nickname = nickname;
    this.thumbnailImageUrl = thumbnailImageUrl;

  }
  factory KakaoUserProfile.fromJson(Map<String, dynamic> json) => _$KakaoUserProfileFromJson(json);

  Map<String, dynamic> toJson() => _$KakaoUserProfileToJson(this);
}

 

아래 커맨드 라인 명령어를 실행시

flutter pub run build_runner build

 

 

아래 파일이 자동생성된다.

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'kakao_profile.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

KakaoUserProfile _$KakaoUserProfileFromJson(Map<String, dynamic> json) =>
    KakaoUserProfile(
      json['id'] as int?,
      json['nickname'] as String?,
      json['thumbnailImageUrl'] as String?,
    );

Map<String, dynamic> _$KakaoUserProfileToJson(KakaoUserProfile instance) =>
    <String, dynamic>{
      'id': instance.id,
      'nickname': instance.nickname,
      'thumbnailImageUrl': instance.thumbnailImageUrl,
    };

 

 

이렇게 편리하게 사용이 가능하다.

컬럼 수가 많을때 진행하면 편리할듯하다.

반응형