C#/복습

직렬화, 역직렬화

Game Client Lee Hwanguk 2023. 1. 24. 00:35
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO; 

namespace ConsoleApp8
{
    internal class App
    {
       
        public App()
        {
            //객체 직렬화/역직렬화 

            //1.직렬화(인스턴스 -> json)
            Item item0=new Item("장검", 10); //인스턴스 생성
            string json=JsonConvert.SerializeObject(item0); //직렬화
            Console.WriteLine(json); //json화 확인
            File.WriteAllText("my_item.json",json); //파일 저장. 파일명(my_item.json), 확장자 json 

            //2.역직렬화(json->인스턴스)
            string json1 = File.ReadAllText("./my_item.json"); //파일 읽기
            Item item1=JsonConvert.DeserializeObject<Item>(json1); //역직렬화
            Console.WriteLine("name:{0}, damage:{1}",item1.name,item1.damage);


            //3.직렬화(배열->json)
            Item[] items = { new Item("단검", 5),
                            new Item("도끼",12),
                            new Item("창",13)
                            };
            string json2=JsonConvert.SerializeObject(items); //직렬화
            Console.WriteLine(json2);
            File.WriteAllText("./my_item.json", json2);

            //4.역직렬화(json->배열)
            string json3=File.ReadAllText("./my_item.json"); //파일 읽기
            Item[] items0 = JsonConvert.DeserializeObject<Item[]>(json3); //역직렬화
            List<Item>list=items0.ToList(); //.ToList로 list만들기
            foreach(var item in list)
            {
                Console.WriteLine("name:{0} damage:{1}",item.name,item.damage);
            }

            string path = "my_item.json";
            //파일 지우기
            if(File.Exists(path))
            {
                File.Delete(path);
                Console.WriteLine("파일 삭제");
            }
            else
            {
                Console.WriteLine("파일 {0}이 없다",path);
            }
                
        }
        

    }
}

#직렬화(List -> json) 역직렬화(json->List)

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; 

namespace ConsoleApp8
{
    internal class App
    {
       
        public App()
        {
            //1.직렬화 
            //item을 담을 배열 또는 리스트(동적배열) 생성

            //Item[] items = { new Item("장검", 10), new Item("단검", 4), new Item("창", 11) };
            List<Item> items = new List<Item>();
            //아이템 생성 후 리스트에 추가
            items.Add(new Item("장검", 9));
            items.Add(new Item("단검", 3));
            items.Add(new Item("창",11));
            items.Add(new Item("도끼", 10));

            string json=JsonConvert.SerializeObject(items); //items 직렬화 하기(json화)
            Console.WriteLine(json); //출력으로 확인
            File.WriteAllText("./my_item.json", json); //직렬화된 json 파일을 my_item.json에 저장

            //2.역직렬화
            string json1=File.ReadAllText("./my_item.json"); //읽은 파일(my_item.json)을 json1 에 할당
            Item[]items1=JsonConvert.DeserializeObject<Item[]>(json1); //역직렬화 json1파일을 Item[]형식으로 역직렬화
            foreach (var items2 in items1)
            {
                Console.WriteLine("name:{0} damage:{1}",items2.name, items2.damage);
            }

        }
        

    }
}