2019-10-23 23일차 Json 역직렬화, 직렬화
Console Programming/C# Console 2019. 10. 24. 18:32Json의 역직렬화, 직렬화
equipment_data.json 파일을 불러와서
string 타입 json이라는 변수에 넣고,
역직렬화를 한 뒤 EquipmentData[ ] 타입의 변수에 담는다.
EquipmentInfo를 멤버변수로 가지는
Equipment를 만들어서 장검의 데이터를 담은 뒤에
장검을 강화한다.
이 EquipmentInfo를 serializedJson 라는 변수에 직렬화한다.
이 serializedJson 의 내용을 equipment_info.json 파일에 쓴다.
2회차 실행부터는 equipment_info.json파일을 불러온다.
equipment_data.json
[
{
"id": 100,
"name": "장검",
"damage": 10
},
{
"id": 200,
"name": "단검",
"damage": 11
},
{
"id": 300,
"name": "도끼",
"damage": 12
},
{
"id": 400,
"name": "활",
"damage": 13
}
]
Program.cs
namespace Syntax05JsonSerialize
{
class Program
{
static void Main(string[] args)
{
new App();
}
}
}
App.cs
using System;
using System.IO;
using Newtonsoft.Json;
namespace Syntax05JsonSerialize
{
public class App
{
EquipmentInfo info;
public App()
{
//string path = @"./game_info.json";
//int[,] arrGame = new int[,]
//{
// {0, 0, 0, 0, 2},
// {0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0}
//};
//GameInfo gameInfo = new GameInfo();
//gameInfo.arr = arrGame;
//var json = JsonConvert.SerializeObject(gameInfo);
//File.WriteAllText(path, json);
//var json2 = File.ReadAllText(path);
//Console.WriteLine(json2);
//GameInfo savedGame = JsonConvert.DeserializeObject(json2);
//for(int i=0; i < savedGame.arr.GetLength(0); i++)
//{
// for(int j =0; j<savedGame.arr.GetLength(1); j++)
// {
// Console.Write($"{savedGame.arr[i, j]}\t");
// }
// Console.WriteLine();
//}
if (File.Exists("./equipment_info.json"))
{
string path = @"./equipment_info.json";
var json = File.ReadAllText(path);
EquipmentInfo data = JsonConvert.DeserializeObject(json);
info = data;
}
else
{
string path = @"./equipment_data.json";
var json = File.ReadAllText(path);
EquipmentData[] arrEquipmentData = JsonConvert.DeserializeObject<EquipmentData[]>(json);
var data = arrEquipmentData[0];
info = new EquipmentInfo(data.id, data.name, data.damage);
}
Equipment equipment = new Equipment(info);
//장검의 데미지
Console.WriteLine(equipment.equipmentInfo.damage);
//장검을 강화하면
equipment.equipmentInfo.damage++;
//장검의 데미지
Console.WriteLine(equipment.equipmentInfo.damage);
var serializedJson = JsonConvert.SerializeObject(equipment.equipmentInfo);
File.WriteAllText("./equipment_info.json", serializedJson);
}
}
}
Equipment.cs
namespace Syntax05JsonSerialize
{
public class Equipment
{
public EquipmentInfo equipmentInfo;
public Equipment(EquipmentInfo info)
{
this.equipmentInfo = info;
}
}
}
EquipmentData.cs
namespace Syntax05JsonSerialize
{
public class EquipmentData
{
public int id;
public string name;
public int damage;
}
}
EquipmentInfo.cs
namespace Syntax05JsonSerialize
{
public class EquipmentInfo
{
public int id;
public string name;
public int damage;
public EquipmentInfo(int id, string name, int damage)
{
this.id = id;
this.name = name;
this.damage = damage;
}
}
}
GameInfo.cs
namespace Syntax05JsonSerialize
{
public class GameInfo
{
public int[,] arr;
public GameInfo()
{
}
}
}
맨 처음 실행할 때
2번째 실행할 때
처음에는 없던 equipment_info.json파일이 생성되었다.
'Console Programming > C# Console' 카테고리의 다른 글
2019-10-24 24일차 벡터 (0) | 2019.10.24 |
---|---|
2019-10-23 게임 만들기 2048 게임 (0) | 2019.10.24 |
2019-10-23 23일차 엔트리 라인레인저스 내용을 코드로바꾸면 (0) | 2019.10.24 |
2019-10-23 23일차 재귀함수 4 x 5행렬에서 숫자 움직이기 (0) | 2019.10.24 |
2019-10-23 23일차 재귀함수(2) (0) | 2019.10.24 |