주의! Unity 혹은 Java에서의 Json이 아니라 C# VisualStudio 환경에서의 Json 내용을 담고있다.
"inventory": {
"items": [
{
"type": 1,
"isEquipped": true,
"name": "수련자 갑옷",
"value": 5,
"description": "수련에 도움을 주는 갑옷입니다.",
"isSold": true,
"price": 1000
},
{
"type": 1,
"isEquipped": false,
"name": "오래된 갑옷",
"value": 2,
"description": "오래되어서 방어력이 낮은 갑옷입니다.",
"isSold": true,
"price": 400
}
]
}
위의 Json파일에서 items는 리스트이다.
개인과제를 진행했을 당시에 위의 파일에서 보다시피 저장엔 성공했었다.
다만 불러올 때 리스트가 다 비워진 상태로 저장이 됐다.
이번에 팀과제를 하면서 한 팀원에게 얻은 지식인데
팀원의 말로는 Json이 리스트를 저장할줄 몰라서 리스트를 클래스로 한 번 감싸주면 저장할 줄 알게 된다고 했다.
그래서 리스트를 클래스형식으로 바꾸기 위해 기존의 C# 코드에서 리스트 구현부분을 가져와서 아래와 같이 코드를 작성하셨다고 했다.
//json 저장용 List<Item> 대체 클래스
public class ItemList
{
public List<Item> Data { get; private set; }
public uint Count { get; private set; }
//Json 저장용 constructor
[JsonConstructor]
public ItemList(List<Item> data, uint count)
{
this.Data = data;
this.Count = count;
}
public ItemList()
{
this.Data = new List<Item>();
this.Count = 0;
}
//기존 List의 Add 메소드를 이 클래스에 맞게 변환
public void Add(Item item)
{
Data.Add(item);
Count++;
}
//기존 List의 Remove 메소드를 이 클래스에 맞게 변환
public void Remove(Item item)
{
Data.Remove(item);
Count--;
}
//기존 List의 Contains 메소드를 이 클래스에 맞게 변환
public bool Contains(Item item)
{
return Data.Contains(item);
}
// Sets or Gets the element at the given index.
// 리스트가 [index]로 가져오는 함수를 가져와서 따라함
public Item this[int index]
{
get
{
// Following trick can reduce the range check by one
if ((uint)index >= (uint)Count)
{
throw new IndexOutOfRangeException("Index 범위 초과!!");
}
return Data[index];
}
set
{
if ((uint)index >= (uint)Count)
{
throw new IndexOutOfRangeException("Index 범위 초과!!");
}
Data[index] = value;
}
}
}
위의 코드는 기존 List를 구현한 코드인데, `<>` 안에 내가 만든 클래스 자료형을 넣어서 나만의 리스트를 만들게 된 것이다.
그리고 클래스로 한 번 씌워줬으니 Json에 저장이 될 것이다.
코드에 사용된 어트리뷰트▼
`[JsonConstructor]` : 이 어트리뷰트를 생성자 위에 사용하면 JSON에서 객체를 역직렬화할 때 사용할 생성자를 지정할 수 있다. 예를 들어 클래스가 여러 생성자를 가질 때, 어떤 생성자를 JSON 역직렬화에 사용할 것인지를 지정한다.
반응형
'스파르타 게임개발종합반(Unity) > TIL - 본캠프 매일 공부 기록' 카테고리의 다른 글
2024.05.02 TIL - 추상화 클래스(abstract), 인터페이스(interface), 상속, static, 싱글톤 (0) | 2024.05.02 |
---|---|
2024.05.01 TIL - 클래스 분리의 중요성 (0) | 2024.05.01 |
2024.04.29 TIL - GitHub 브랜치 생성 삽질한 기록 (0) | 2024.04.29 |
2024.04.26 TIL - enum, Json 문제점 (1) | 2024.04.26 |
2024.04.25 TIL - double형 소수점 자리수, ToString, int, 명시적 형변환 (1) | 2024.04.25 |
댓글