해결된 질문
작성
·
52
답변 2
1
안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다.
IUserData는 클래스가 아니라 인터페이스이기 때문에 기존 JsonUtility를 사용해서는 json으로 변환할 수 없습니다. Newtonsoft.Json 어셋을 활용한 방법을 알려드리니 이를 활용하시길 바랍니다.
using Newtonsoft.Json; //Newtonsoft.Json 어셋을 설치하셔야 합니다.
var settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
Formatting = Newtonsoft.Json.Formatting.Indented
};
//json으롭 변환
string json = JsonConvert.SerializeObject(UserDataList, settings);
Console.WriteLine(json);
//UserDataList로 역변환
List<IUserData> deserializedList = JsonConvert.DeserializeObject<List<IUserData>>(json, settings);
Newtonsoft.Json 어셋 설치는 이 링크를 참고하시길 바랍니다. 제가 캡쳐한 부분을 참고하시면 됩니다.
https://github.com/applejag/Newtonsoft.Json-for-Unity/wiki/Install-official-via-UPM
저는 아래 코드와 같이 하였을 때 정상적으로 AllDataManager에서 jsonData가 잘 만들어집니다. 그냥 AData, BData 클래스를 사용하시면 될 것 같은데, A와 B 클래스를 또 만들어서 그 안에 다시 AData와 BData를 각각 넣어주어야 할 특별한 이유가 있으신가요?
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class AData
{
public bool sound;
public float bgmValue;
public float sfxValue;
public AData()
{
sound = true;
bgmValue = 0.8f;
sfxValue = 0.8f;
}
}
[Serializable]
public class BData
{
public bool testFlag;
public float test1Value;
public float test2Value;
public BData()
{
testFlag = true;
test1Value = 0.8f;
test2Value = 0.8f;
}
}
[Serializable]
public class AllData
{
public AData aData;
public BData bData;
public AllData(AData aData, BData bData)
{
this.aData = aData;
this.bData = bData;
}
}
public class AllDataManager : MonoBehaviour
{
public AllData allData = new AllData(new AData(), new BData());
void Awake()
{
string jsonData = JsonUtility.ToJson(allData);
Logger.Log(jsonData);
}
}
0
안녕하세요, 인프런 AI 인턴입니다. moonfgg님.
UserDataManager에서 모든 IUserData
를 관리하는 userDataList
를 JSON 형식으로 파일에 저장하려는 시도를 하고 계시는군요. 데이터를 JSON으로 저장하면 여러 장점이 있습니다. 특히, JSON은 사람이 읽기 쉽고, 다양한 프로그래밍 환경에서 지원하기 때문에 데이터 교환 및 저장에 유리합니다.
JsonUtility 사용: 유니티의 JsonUtility
클래스는 객체를 JSON 문자열로 변환해주는데, 이때 객체 내부 클래스가 Serializable
이어야 합니다.
userDataList
를 JSON 문자열로 변환합니다:
string json = JsonUtility.ToJson(userDataList);
변환된 JSON 문자열을 파일로 저장합니다:
System.IO.File.WriteAllText("path_to_save/file.json", json);
파일에 저장하기 전 준비:
json
확장자를 붙입니다.JsonUtility
외에도 Newtonsoft.Json 같은 라이브러리를 사용할 수 있는데, 이는 더 다양한 기능을 제공하고 있습니다.관련된 과거 질문에서도 더 많은 정보를 찾으실 수 있을 것 같습니다. 아래 내용을 확인해보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이런 것이 있었군요! 감사합니다.
그러면 혹시 강의 내용의 인터페이스들의 List가 아닌 그냥 각각의 다른 Manager들을 한 곳에서 모아서 Json으로 만들어서 관리할 수 있을 까요?
계속 시도를 하지만 아래 그림 처럼 이상하게 저장됩니다...
A, B 클래스가 다른 Data를 저장하는 Manager 역할을 합니다.