Json으로 클래스 데이터 저장시 자식 클래스가 아닌 부모 클래스명으로만 저장되는 문제
// 장착중인 방어력 아이템 능력치를 모두 더하여 반환
public double TotalDefenseItemStatus()
{
double totalItemValue = 0;
foreach (Item item in items)
{
Console.WriteLine(item.itemValue); // 5
Console.WriteLine(item.isEquipped == true); // True
Console.WriteLine(item.GetType()); // SpartaTextRPG.Item
if (item.isEquipped == true && item is Armor)
totalItemValue += item.GetItemValue();
}
return totalItemValue;
}
Item클래스를 Armor, Weapon 클래스가 상속받고 있는 구조였고, `Item is Armor` 으로 아이템의 타입이 어떤지 체크했었다.
하지만 막상 어떤 타입인지 출력해보니까 Item 클래스로 떴다..
"inventory": {
"items": [
{
"type": 1,
"isEquipped": true,
"name": "수련자 갑옷",
"value": 5,
"description": "수련에 도움을 주는 갑옷입니다.",
"isSold": true,
"price": 1000
}
]
왜 그럴까 싶어서 Json 파일을 열어봤더니 Item 클래스까지만 저장이 되어있고, 자식 클래스는 알 수 없었다.
`items.Add(new Armor())` 애초에 이런식으로 자식 클래스 초기화를 했지만 Json 파일에는 반영이 안됐다.
자식 클래스명으로 타입을 아는 것이 아닌 enum으로 타입 알아내기
public enum ITEM_TYPE
{
Armor =1,
Weapon
}
결국 enum으로 `items.Add(new Armor(ITEM_TYPE.Armor))` 각 타입들을 설정해줬다..
`item is 클래스명` `item.GetType()` 으로 사용했던 코드들을 싹 바꾸게 되었다. ㅠㅠ
반응형
'스파르타 게임개발종합반(Unity) > TIL - 본캠프 매일 공부 기록' 카테고리의 다른 글
2024.04.30 TIL - Json 저장용 리스트 클래스 만들기 (0) | 2024.04.30 |
---|---|
2024.04.29 TIL - GitHub 브랜치 생성 삽질한 기록 (0) | 2024.04.29 |
2024.04.25 TIL - double형 소수점 자리수, ToString, int, 명시적 형변환 (1) | 2024.04.25 |
2024.04.24 TIL - Item 클래스의 상속, 인터페이스, 다중 상속 (0) | 2024.04.24 |
2024.04.23 TIL2 - 캡슐화, 상속, 다형성, 추상화, 객체, 오버로딩, 오버라이딩, 프로퍼티, Virtual, Abstract, 제너릭, out, ref (0) | 2024.04.23 |
댓글