JSON Loader 리스트 형태 파싱 할 수있도록 코드 수정

This commit is contained in:
aube.lee
2025-02-01 18:12:50 +09:00
parent 933740c887
commit 0598cd1ce7

View File

@@ -1,3 +1,4 @@
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@@ -9,19 +10,47 @@ namespace TON
{ {
private const string DATA_PATH = "GameData/"; private const string DATA_PATH = "GameData/";
// 제네릭 리스트를 감싸기 위한 래퍼 클래스
[Serializable]
private class Wrapper<T>
{
public List<T> items;
}
/// <summary> Resources 폴더에서 JSON 파일을 읽어 특정 데이터 타입으로 변환하는 함수 </summary> /// <summary> Resources 폴더에서 JSON 파일을 읽어 특정 데이터 타입으로 변환하는 함수 </summary>
public static T LoadFromResources<T>(string fileName) public static T LoadFromResources<T>(string fileName)
{ {
if (fileName.EndsWith(".json"))
{
fileName = fileName.Replace(".json", ""); // 확장자 제거
}
string path = DATA_PATH + $"{fileName}"; string path = DATA_PATH + $"{fileName}";
TextAsset jsonFile = Resources.Load<TextAsset>(path); TextAsset jsonFile = Resources.Load<TextAsset>(path);
if (jsonFile != null) if (jsonFile != null)
{ {
return JsonUtility.FromJson<T>(jsonFile.text); string jsonText = jsonFile.text;
// T가 List<> 형태인지 검사
if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(List<>))
{
// JSON을 감싸는 래퍼 추가하여 변환
string wrappedJson = "{\"items\":" + jsonText + "}";
Type itemType = typeof(T).GetGenericArguments()[0]; // 리스트의 요소 타입 가져오기
Type wrapperType = typeof(Wrapper<>).MakeGenericType(itemType); // Wrapper<T> 생성
object wrapperInstance = JsonUtility.FromJson(wrappedJson, wrapperType); // 변환 실행
return (T)wrapperType.GetField("items").GetValue(wrapperInstance); // 리스트 추출
}
// 일반 객체 변환
return JsonUtility.FromJson<T>(jsonText);
} }
else else
{ {
Debug.LogError($"JSON 파일을 찾을 수 없습니다: {fileName}"); Debug.LogError($"JSON 파일을 찾을 수 없습니다: {path}");
return default; // 기본값 반환 return default;
} }
} }