작성
·
77
0
이전 강의에서 freezed 3.0 변경점으로 default 사용시 일반 생성자 초기화하듯 사용하는 방법으로
진행해도 된다고 하셨는데
@JsonKey 사용법도 기존 생성자 작성과 동일하기 하고 아래 *참고소스1과 동일하게 진행해도 되는지 문의드립니다.
참고소스1
import 'package:freezed_annotation/freezed_annotation.dart';
part 'company_info_dto.freezed.dart';
part 'company_info_dto.g.dart';
// ignore_for_file: annotate_overrides
@freezed
@JsonSerializable()
class CompanyInfoDto with _$CompanyInfoDto {
@JsonKey(name: 'Symbol')
final String? symbol;
@JsonKey(name: 'Name')
final String? name;
@JsonKey(name: 'Description')
final String? description;
@JsonKey(name: 'Industry')
final String? country;
@JsonKey(name: 'Country')
final String? industry;
const CompanyInfoDto({
this.symbol,
this.name,
this.description,
this.industry,
this.country,
});
factory CompanyInfoDto.fromJson(Map<String, dynamic> json) =>
_$CompanyInfoDtoFromJson(json);
Map<String, dynamic> toJson() => _$CompanyInfoDtoToJson(this);
}
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
답변 2
1
네. 이렇게 하시면 됩니다.
아니면 DTO 는 freezed 안 쓰고 json to dart 플러그인으로 만드는게 오히려 편하고 빌드 시간도 줄일 수 있습니다.
freezed 가 copyWith, toString, == 재정의를 도와주는데 DTO 는 다 필요가 없고 fromJson, toJson 이 있는 모든 필드가 Nullable 인 객체면 되기 때문입니다.
0
안녕하세요, 인프런 AI 인턴입니다.
mhlee님께서 질문하신 내용과 관련하여 freezed
와 JsonKey
사용법에 관해서 안내해 드리겠습니다.
freezed 3.0
버전에서는 데이터 클래스를 생성할 때 변경된 점이 몇 가지 있습니다. 특히, JsonKey
사용법은 freezed
의 기능을 통해 자동으로 toJson
과 fromJson
메서드를 생성할 수 있도록 구성됩니다.
@freezed
와 @JsonSerializable()
조합: freezed
플러그인과 json_serializable
의 경우 서로 호환됩니다. 따라서 @JsonSerializable()
를 클래스에 사용할 수 있으며, 이는 자동으로 JSON (de)serialization 기능을 추가해줍니다.
생성자와 JsonKey
사용:
JsonKey
는 직렬화와 역직렬화 시에 JSON 파일의 키 이름을 지정하는 데 사용됩니다.@JsonKey
어노테이션을 통해 JSON 키를 지정하는 것은 올바른 방법입니다.@JsonKey(name: 'Symbol')
final String? symbol;
위와 같은 방식으로 @JsonKey
어노테이션을 사용하여 JSON에서 특정 키 이름(Symbol
)을 사용하도록 설정할 수 있습니다. 이는 JSON이 인식할 수 있는 적절한 이름을 제공하여 변환 시 데이터의 정확성을 높일 수 있습니다.
freezed
, json_serializable
을 사용하는 방법에 대한 유용한 정보입니다.freezed
버전 차이에 따른 생성 차이: freezed
버전 간 차이점과 사용법에 관한 질문과 답변입니다.작성하신 소스 코드는 올바른 구성으로 보입니다. 이 방식으로 진행하시면 됩니다. 추가적인 궁금증이 있으시면 언제든지 질문해 주세요!
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다