꾸준히 하고싶은 개발자

11일 직렬화 역직렬화 본문

모두의연구소

11일 직렬화 역직렬화

프라우스 2023. 12. 11. 23:02

CSV (Comma Separated Values)

특징

csv 는 콤파로 쉼표로 구분 된 text 형식 데이터

dart 에서 csv를 다루기 위해서 csv 패키지를 사용할 수있습니다.

Properties

특징

파일에 설정 정보를 저장하기 위해서 사용되는 text 형식 데이터

properties key value 한쌍으로 이루어져있다.

다트에는 프로퍼티 패키지를 사용하면 파일의 key-value 형태로 값을 사용한다.

xml

특징

계층(피라미드) 구조 데이터를 표현하는 마크업 언어다

dart 에서 xml을 다루기 위해서 라이브러리 사용해야한다.

Json

특징

가벼운 무게의 데이터 교환 방식으로 현재 개발에서 많이 사용하는 방식이다.

Json 문자열을 객체로 파싱 하거나 객체를 Json 문자열 직렬화하는 기능과 역직렬화을 할 수있다.

직렬화

특징

객체 나 데이터 를 외부에서 json과xml 으로 변환하는 걸 직렬화

직렬화된 데이터를 저장하고 데이터를 보내고 데이터를 공유하고

역직렬화

직렬화된 데이터를 원래 상태로 원상 복구 변환하는 과정

직렬화된 데이터를 읽고 해당 하는 기반으로 객체나 데이터 구조를 원래상태로 돌리는것이다.

import 'dart:convert';
import 'dart:io';
import 'dart:math';

import 'package:dart_basic/23_12_04/wand.dart';

void main() {
  final json = {
    "name": "Person1",
    "email": "person@example.com",
    "gender": "man",
    "age": 10,
  };
  // json 타입 확인하기
  print(json.runtimeType);

  final person1 = Person(
    name: '사람1',
    email: 'person@example.com',
    gender: 'man',
    age: 23,
  );
  print(person1.toJson());

  Person person2 = Person.fromJson({
    'name': '사람2',
    'email': 'person@example.com',
    'gender': 'woman',
    'age': 24,
  });

  print(person2.toJson());

  File file = File('person.txt');
  //file.writeAsStringSync(jsonEncode(person2.toJson()));

  String personJson = file.readAsStringSync();
  print(personJson);

  Person person3 = Person.fromJson(jsonDecode(personJson));

  print(person3.toString());
}

class Person {
  String name;
  String email;
  String gender;
  int age;

  Person({
    required this.name,
    required this.email,
    required this.gender,
    required this.age,
  });

  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'email': email,
      'gender': gender,
      'age': age,
    };
  }

  // 역 직렬화
  factory Person.fromJson(Map<String, dynamic> map) {
    return Person(
      name: map['name'],
      email: map['email'],
      gender: map['gender'],
      age: map['age'] ?? 0,
    );
  }

  // 꼭 필요한경우가 아니면 toString을  굳이 안해도 된다.
  @override
  String toString() {
    return 'Person{name: $name, email: $email, gender: $gender, age: $age}';
  }

  //직렬화
  Map<String, dynamic> toJsonSerialization() {
    return {
      'name': name,
      'email': email,
      'gender': gender,
      'age': age,
    };
  }
}

'모두의연구소' 카테고리의 다른 글

12일디버깅  (0) 2023.12.12
12람다함수  (0) 2023.12.12
11일차 파일 다루기  (0) 2023.12.11
예외 (Exception)  (0) 2023.12.11
10일 String  (1) 2023.12.08