Dart JSON 문자열로 직렬화하기

이건선·2023년 7월 25일
0

Flutter

목록 보기
19/30

List<AddressBookModel>과 같은 복잡한 객체가 존재 할 때, JSON 포맷으로 직렬화하여 문자열로 변환한 후 저장하는 방법

예제

...
    } else if (value is List<AddressBookModel>) {
      prefs.setStringList(key, value);
    }   else {
      print("--> StorageManager error : Invalid Type");
      return false;
    }
    return true;
  }
...

json 패키지의 jsonEncode 함수를 사용하여 AddressBookModel 객체의 리스트를 JSON 문자열로 직렬화할 수 있습니다.

먼저 AddressBookModel 클래스에 toJson 메소드를 추가해야 합니다.

class AddressBookModel {
  final String name;
  final String phone;

  AddressBookModel({required this.name, required this.phone});

// toJson
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'phone': phone,
    };
  }
}

이제 map메서드를 사용해서 List<AddressBookModel> 객체를 직렬화하여 저장할 수 있습니다.


...

} else if (value is List<AddressBookModel>) {
      List<String> serializedList = value.map((item) => jsonEncode(item.toJson())).toList();
      prefs.setStringList(key, serializedList);
    }
    
...

나중에 이 데이터를 읽어올 때는 JSON 문자열을 다시 AddressBookModel 객체로 역직렬화해야 합니다. 이를 위해 AddressBookModel 클래스에는 fromJson 메소드를 추가해야 합니다.

class AddressBookModel {
  final String name;
  final String phone;

  AddressBookModel({required this.name, required this.phone});

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

  // fromJson 
  static AddressBookModel fromJson(Map<String, dynamic> json) {
    return AddressBookModel(
      name: json['name'],
      phone: json['phone'],
    );
  }
}
...

String jsonString = {"name" : "John" , "phone" : "iphone"}

...

AddressBookModel addressBookModel = AddressBookModel.fromJson(jsonDecode(jsonString));

...
profile
멋지게 기록하자

0개의 댓글