반응형
Dart 언어에서는 직렬화를 위해 json_serializable 패키지를 사용할 수 있다고는 하지만, plugin의 Marketplace 에서 Dart Data Class 라는 것을 설치하게 되면 아래와 같이 toJson()/fromJson() 을 쉽게 활용 할 수 있습니다.
조금 황당한 점은 위의 설명에는 함수명이 toJson()/fromJson() 이지만, 실제로 설치하면 아래와 같이 toMap()/fromMap() 으로 나옵니다. (기능은 동일합니다.)
class Employee {
String name;
int age;
Employee({
required this.name,
required this.age,
});
Map<String, dynamic> toJson() {
return {
'name': this.name,
'age': this.age,
};
}
factory Employee.fromJson(Map<String, dynamic> map) {
return Employee(
name: map['name'] as String,
age: map['age'] as int,
);
}
위의 코드는 toMap()과 fromMap()을 자동 생성한 코드로서 함수명만 toJson()과 fromJson()으로 변경해 주었습니다. 이렇게 Dart 언어에서는 간단하게 클래스를 직렬화가 가능하도록 만들 수 있으며, 아래의 코드는 Department객체를 직렬화하는 코드 입니다.
반응형
final employee = Employee(name: '홍길동', age: 41);
final department = Department(name: '총무부', leader: employee);
department.toJson()
하지만 toJson() 함수를 사용하여 직렬화를 하더라도, 실제 파일로 저장할 때에는 JsonEncode를 사용하여야 정확히 Json 타입으로 변경이 됩니다.
File('department.txt').writeAsStringSync(jsonEncode(department.toJson()));
위의 코드는 department.txt 파일에 Department 객체 직렬화하여 저장하는 코드입니다.
print(File('department.txt').readAsStringSync());
결과 : {"name":"총무부","leader":{"name":"홍길동","age":41}}
그리고 위와 같이 파일로부터 단순히 읽어오면, json 형식으로 불러오기에 Dart 언어 내부에서 데이터로서 활용하기 위해서는 jsonDecode를 해 주어야 합니다.
print(jsonDecode(File('department.txt').readAsStringSync()));
결과 : {name: 총무부, leader: {name: 홍길동, age: 41}}
이와 같이 Dart에서 직렬화를 plugin설치하여 사용함으로써, 데이터를 쉽고 효율적으로 처리할 수 있습니다.
728x90
반응형
'Dart, Flutter for App' 카테고리의 다른 글
Dart - 컬렉션(List, Map, Set)+Dynamic 타입 (1) | 2024.02.07 |
---|---|
Dart - 비동기 활용 (0) | 2024.02.07 |
Flutter Package : Animated_Tree_View 활용 (1) | 2024.01.31 |
Flutter Error | Error (Xcode): expected a ‘=’, but found ? (0) | 2024.01.06 |
Dart - operator == , hashCode, & compareTo() (2) | 2023.12.07 |