JSON예제, 대리자 복습
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace Starcraft
{
public class App
{
// Dictionary<int, ItemData> dicItemDatas;
//생성자
public App()
{
//게임 시작전에 게임에서 사용할 데이터를 로드
DataManager.instance.LoadItemDatas();
if (File.Exists("./item_info.json"))
{
//있다 : 기존유저
Console.WriteLine("기존유저입니다.");
string json = File.ReadAllText("./item_info.json");
//역직렬화 문자열 -> 객체
ItemInfo info = JsonConvert.DeserializeObject<ItemInfo>(json);
Item item = new Item(info);
int id = item.GetID();
string name = item.Name;
int damage = item.GetDamage();
Console.WriteLine("ID: {0}", id);
Console.WriteLine("이름: {0}", name);
Console.WriteLine("공격력: {0}", damage);
}
//신규유저
else
{
Console.WriteLine("신규유저입니다.");
//기본무기 : 신규유저
ItemData data = DataManager.instance.GetItemData(100);
ItemInfo info = new ItemInfo(data.id, data.damage);
Item item = new Item(info);
int id = item.GetID();
string name = item.Name;
int damage = item.GetDamage();
Console.WriteLine("ID: {0}", id);
Console.WriteLine("이름: {0}", name);
Console.WriteLine("공격력: {0}", damage);
//직렬화
//객체 -> 문자열
string json = JsonConvert.SerializeObject(item.GetInfo());
Console.WriteLine(json);
//파일로 저장
File.WriteAllText("./item_info.json", json);
}
}
}
}
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace Starcraft
{
internal class DataManager
{
public static readonly DataManager instance = new DataManager();
private Dictionary<int, ItemData> dicItemDatas = new Dictionary<int, ItemData>();
//생성자
public DataManager() { }
public void LoadItemDatas()//아이템 데이터를 로드
{
//파일 읽기
string json = File.ReadAllText("./item_data.json");
Console.WriteLine(json);
Console.WriteLine("====> {0}", json.Length);
if (json.Length == 0) {
Console.WriteLine("데이터에 문제가 있습니다.");
return;
}
//역직렬화
var arr = JsonConvert.DeserializeObject<ItemData[]>(json);
//dictionary에 옮겨담기
foreach (ItemData data in arr)
{
this.dicItemDatas.Add(data.id, data);
}
//dicItemDatas = arr.ToDictionary(x => x.id);
Console.WriteLine(this.dicItemDatas.Count);
}
public ItemData GetItemData(int id)//데이터 반환
{
return this.dicItemDatas[id];
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class Item
{
ItemInfo info;
public string Name {
get {
var data = DataManager.instance.GetItemData(this.info.id);
return data.name;
}
}
public Item(ItemInfo info) {
this.info = info;
}
public int GetID()
{
return this.info.id;
}
public int GetDamage()
{
return this.info.damage;
}
public ItemInfo GetInfo()
{
return this.info;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class ItemData
{
public int id;
public string name;
public int damage;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
//저장객체
internal class ItemInfo
{
public int id;
public int damage;
public ItemInfo(int id, int damage) {
this.id=id;
this.damage=damage;
}
}
}
json내용
-----------------------------------------
[
{
"id": 100,
"name": "장검",
"damage": 8
},
]
-------------------------------------------
'C# 기초 복습' 카테고리의 다른 글
Quaternion.identity, LookRotation, 비트 연산자 (0) | 2023.08.21 |
---|---|
Unity- Coroutines(코루틴) (0) | 2023.08.08 |
2주차 복습 (0) | 2023.07.31 |
배열 예제 복습 (0) | 2023.07.25 |
1주차 복습 (0) | 2023.07.24 |