본문 바로가기
스파르타 내배캠

스파르타 내배캠 Unity 3기 31일차

by LemongO 2024. 2. 5.

하...얗게 불태웠다...

 

 

캠프 시작하고 한 동안 체중계 건전지가 없어서 몸무게를 못재고 있었다.

저번주에 사우나에서 쟀을 때 2달전보다 5kg 줄어있던데... 사실이면 진짜 심각한데??? 내일은 건전지 꼭 사야지

 


[System.Serializable]  그리고 래핑 클래스

 

오늘은 짧게!

 

개인과제를 하면서 날 괴롭혔던 두 가지를 알아보고자 한다.

 

  1. 유니티에서 Json을 이용하여 PlayerPrefs 저장
  2. 근데 저장해야 되는게 class 를 담은 List

 

리스트에 담길 Account 클래스

public class Account
{
    public string id;
    public string name;
    public string pw;
    public int cash;
    public int balance;
}

 

public List<Account> _saveAccounts = new List<Account>();

내가 저장해야할 List<Account> _saveAccounts

 

string data = JsonUtility.ToJson(_saveAccounts);

data 는 _saveAccounts 를 직렬화 하여 string으로 가지고있다.

 

하지만 이녀석을 디버깅 해보면?

 

{}

 

이렇게 된다...

 

첫 번째 이유는 [System.Serializable] 을 Account 클래스에 넣어주지 않아서 직렬화를 할 수 없었다.

 

[System.Serializable]
public class Account
{
    public string id;
    public string name;
    public string pw;
    public int cash;
    public int balance;
}

 

자 이제 어떻게 될까?

 

{}

 

마찬가지다.

 

그 이유는 다음과 같았다.

 

  • List는 직렬화 할 수 없다.
  • List를 직렬화 하기 위해선 List를 담은 Class를 직렬화 하면 된다.

 

그래서 래핑 클래스를 따로 만들어줘야 한다는 것이었다.

 

[System.Serializable]
public class AccountDB
{
    public List<Account> _saveAccounts = new List<Account>();
}

래핑 클래스 AccountDB를 만들고

 

private AccountDB _db = new AccountDB();

객체를 하나 만들어 준다음

 

_db._saveAccounts.Add(account);
string data = JsonUtility.ToJson(_db);

_db 의 List<Account> 에 저장할 Account 를 넣어주고

직렬화를 시킨다면?

 

드디어!

 

저장이 됐다!