반응형
Newtonsoft의 Json.NET을 사용하였다.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
밑의 코드들은 위의 코드를 넣어주어야 사용 가능하다.
Data = ReadJson<Data의 타입>("Json 파일명");
public T ReadJson<T>(string fileName)
{
TextAsset textAsset = Resources.Load<TextAsset>(fileName);
return JsonConvert.DeserializeObject<T>(textAsset.ToString());
}
Assets/Resources 안에 있는 Json 파일을 읽어오는 코드이다.
filePath = Application.persistentDataPath;
Data = ReadJson<Data의 타입>("Json 파일명");
public T ReadJson<T>(string fileName) where T : new()
{
if (System.IO.File.Exists(filePath + "/" + fileName + ".json"))
{
using (StreamReader file = File.OpenText(filePath + "/" + fileName + ".json"))
using (JsonTextReader reader = new JsonTextReader(file))
{
JObject json = (JObject)JToken.ReadFrom(reader);
return JsonConvert.DeserializeObject<T>(json.ToString());
}
}
else
{
return new T();
}
}
기기 안에 있는 Json 파일을 읽어오는 코드이다.
Json 파일이 없다면 new()를 통해 새로운 객체를 만들어 반환한다.
WriteJson(Data, "파일명.json");
public void WriteJson<T>(T input, string fileName)
{
string json = JsonConvert.SerializeObject(input);
JObject jobject = JObject.Parse(json);
File.WriteAllText(filePath + "/" + fileName, jobject.ToString());
}
기기에 Json 파일을 저장하는 코드이다.
Dictionary 형태가 아닌
[System.Serializable]
public class GameData
{
public int month;
public int year;
public int reputation;
public int gold;
}
이런 클래스도 읽고 쓸 수 있지만 [System.Serializable]을 붙여줘야 한다.
public void ReadItemList()
{
itemList = IOManager.instance.ReadJson<Dictionary<string, ItemInfo>>("ItemList");
}
위의 코드에 있는 IOManager처럼 입출력을 관리하는 싱글톤 객체를 만든 후 사용하면 편하다.
반응형
'프로그래밍 > 유니티 및 C#' 카테고리의 다른 글
[유니티/C#] csv 파일을 원하는 타입으로 읽기(Generic 사용) (0) | 2023.11.08 |
---|---|
[유니티/C#] Scroll View에 유동적인 Text 넣기 (0) | 2023.11.07 |
[유니티/C#] Text 길이에 맞춰 늘어나는 패널 만들기 (0) | 2023.11.02 |
[유니티/C#] 드래그 앤 드롭(Drag and Drop) 시스템 만들기 (1) | 2023.10.31 |
[유니티/C#] List에서 중복 없이 뽑기(조합) (0) | 2023.10.30 |