2019-10-23 23일차 Json 역직렬화, 직렬화

Console Programming/C# Console 2019. 10. 24. 18:32

Json의 역직렬화, 직렬화

 

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파일이 생성되었다.

 

: