App
using System;
using System.IO;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloWorld
{
class App
{
//생성자
public App()
{
//7. 파일 불러오기
string infoPath = "./weapon_info.json";
//4. 파일 읽기
string path = "./weapon_data.json";
string json = File.ReadAllText(path);
Dictionary<int, WeaponData> dicWeaponDatas = new Dictionary<int, WeaponData>();
//5.역직렬화, 6.사전에 넣기
//WeaponData[] weaponDatas = JsonConvert.DeserializeObject<WeaponData[]>(json);
//foreach (WeaponData data in weaponDatas)
//{
// dicWeaponDatas.Add(data.id, data);
//}
dicWeaponDatas =
JsonConvert.DeserializeObject<WeaponData[]>(json).ToDictionary(x => x.id);
//요소가 잘들어갔는지 출력이 잘되는지 확인
//foreach (KeyValuePair<int, WeaponData> data in dicWeaponDatas)
//{
// Console.WriteLine("{0} {1}", data.Key, data.Value.name);
//}
//신규, 기존 구현하기
if (File.Exists(infoPath)) //해당경로에 파일이 있는지 확인
{
Console.WriteLine("기존 유저");
string infoJson = File.ReadAllText(infoPath); //파일의 텍스트들을 불러옴
WeaponInfo info = JsonConvert.DeserializeObject<WeaponInfo>(infoJson);
Weapon weapon = new Weapon(info);
Console.WriteLine("-> {0}", weapon);
Console.WriteLine("-> {0}", weapon.GetInfo().id);
Console.WriteLine("-> {0}", weapon.Reinforcement);
}
else
{
Console.WriteLine("신규 유저");
//3. 무기 정보 객체 생성
WeaponInfo info = new WeaponInfo(dicWeaponDatas[100], 0);
Console.WriteLine("생성된 정보객체 id:{0}, 강화수치:{1}", info.data.id, info.reinforcement);
//4. 무기 객체 생성
Weapon weapon = new Weapon(info);
WeaponData data = weapon.GetInfo();
Console.WriteLine("생성된 무기객체 id:{0}, 강화수치:{1}", data.id, weapon.Reinforcement);
Reinforce(weapon);
//5. 무기 정보 객체 직렬화
//저장하려고 하는 객체의 info객체를 만들어라
WeaponInfo info0 = new WeaponInfo(weapon.GetInfo(), weapon.Reinforcement);
//직렬화
string serializedJson = JsonConvert.SerializeObject(info0);
//6. 파일로 저장
File.WriteAllText("./weapon_info.json", serializedJson);
}
//WeaponInfo info = new WeaponInfo(dicWeaponDatas[100], 0);
//Console.WriteLine("생성된 정보객체 id:{0}, 강화수치:{1}", info.data.id, info.Reinforcement);
//Weapon weapon = new Weapon(info);
//WeaponData data = weapon.GetInfo();
//Console.WriteLine("생성된 무기객체 id:{0}, 강화수치:{1}", data.id, weapon.Reinforcement);
//Reinforce(weapon);
////저장하려고 하는 객체의 info객체를 만들어라
//WeaponInfo info0 = new WeaponInfo(weapon.GetInfo(), weapon.Reinforcement);
////직렬화
//string serializedJson = JsonConvert.SerializeObject(info0);
////저장
//File.WriteAllText("./weapon_info.json", serializedJson);
}
void Reinforce(Weapon weapon)
{
weapon.Reinforcement += 1;
Console.WriteLine("무기강화");
}
}
}
WeaponInfo
더보기
using System;
namespace HelloWorld
{
//2. 무기 정보 클래스
class WeaponInfo
{
public WeaponData data;
public int reinforcement;
public WeaponInfo(WeaponData data, int reinforcement)
{
this.data = data;
this.reinforcement = reinforcement;
}
}
}
Weapon
더보기
using System;
namespace HelloWorld
{
//1. 무기 클래스
class Weapon
{
private WeaponInfo info;
private int reinforcement;
public int Reinforcement
{
get
{
return this.info.reinforcement;
}
set
{
this.info.reinforcement = value;
}
}
//생성자
public Weapon(WeaponInfo info)
{
this.info = info;
}
public WeaponData GetInfo()
{
return this.info.data;
}
}
}
WeaponData
더보기
using System;
namespace HelloWorld
{
//3. 매핑클래스 만들기
public class WeaponData
{
public int id;
public string name;
public float damage;
}
}
신규(weapon_info.json파일이 없다면)
기존(weapon_info_json파일이 있다면)
'C# > 수업 내용' 카테고리의 다른 글
반복기 (0) | 2021.12.24 |
---|---|
event (0) | 2021.12.24 |
파일 읽기, 역직렬화 연습 2 (0) | 2021.12.24 |
파일 읽기, 역직렬화 연습 (0) | 2021.12.24 |
람다식 연습 15 (Comparision) (0) | 2021.12.24 |