공부혜옹

[Unity] JSON Serialize 본문

공부합시다/Unity

[Unity] JSON Serialize

Blair06 2022. 2. 9. 12:27

Json

사용 라이브러리

JSON .NET For Unity | 입출력 관리 | Unity Asset Store

  • 사용이유: JsonUtility 사용 중 serialize시 특정 자료구조에 대해서 공백으로 직렬화 하는 이슈를 발견함 (list, dictionary 등...) JsonUtility 자체가 json의 모든기능을 담고 있지 않기 때문으로 판단하여 라이브러리 변경
  • 특이사항: unity 특정 버전 (2021 이전버전) 에선 해당 라이브러리가 이미 내장되어있어 asset import 없이도 사용 가능하다

데이터 타입정의

[System.Serializable]
public class SceneInfo
{
    public string SceneName;
    public int num;
}
[System.Serializable]
public class MemberInfo
{
    public string name;
    public int num;
}

데이터를 저장할 객체의 타입과 변수명을 미리 정의해놓아야한다

Json 데이터 받아오기

public T GetJsonData<T>()
    {
        string path = Application.dataPath + "/MemberInfo.json";
        string jsonData = File.ReadAllText(path);

        T myObject = JsonConvert.DeserializeObject<T>(jsonData);

        return myObject;
    }

현재 연결할 서버주소가 없기때문에 Application.dataPath로 실제 파일경로를 가져와 읽었다. (향후 바뀔 예정)

멤버 정보, 씬정보등 여러 타입의 객체들을 로드해야할것으로 예상하여 제네릭타입을 사용해 구현하였다

Json 데이터 수정 & 저장

public void UpdateJsonData(MemberInfo _myObject)
    {

        string updatedData = JsonConvert.SerializeObject(_myObject);
        
        SaveJsonData (updatedData);

    }

    public void SaveJsonData(string _json)
    {
        string path = Application.dataPath + "/MemberInfo.json";

        try
        {
            File.WriteAllText(path, _json);

        }
        catch (Exception e)
        {
            Debug.Log(e);
        }

    }

생성한 오브젝트의 변수를 수정하고 해당 오브젝트를 시리얼라이즈시켜 기존 파일에 덮어 씌우는 방식이다

반응형
Comments