본문 바로가기

C#/수업 내용

파일 읽기, 역직렬화 연습

using System;
using System.IO;    //using 지시문으로 네임스페이스 추가
using Newtonsoft.Json;
using System.Collections.Generic; 
using System.Linq;      
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld
{
    class App
    {
        //생성자
        public App()
        {
            string path = "./budget_data.json";
            string json = File.ReadAllText(path);
            Console.WriteLine(json);

            //역직렬화 하기
            BudgetData[] budgetDatas = JsonConvert.DeserializeObject<BudgetData[]>(json);

            Dictionary<int, BudgetData> dicBudgetDatas = new Dictionary<int, BudgetData>();

            foreach (BudgetData data in budgetDatas)
            {
                dicBudgetDatas.Add(data.id, data);
            }

            foreach (KeyValuePair<int, BudgetData> pair in dicBudgetDatas)
            {
                Console.WriteLine("key: {0}, val: {1} {2}", pair.Key, pair.Value.name, pair.Value.type);
            }
            
            //string path = "./item_data.json";
            //string json = File.ReadAllText(path);
            //Console.WriteLine(json);

            ////역직렬화 하기
            //ItemData[] itemDatas = JsonConvert.DeserializeObject<ItemData[]>(json);

            ////itemDatas의 값은 ItemData타입의 배열 인스턴스
            ////배열 안에 요소들의 값은? ItemData 클래스의 인스턴스 5개
            //Dictionary<int, ItemData> dicItemDatas = new Dictionary<int, ItemData>();

            //foreach (ItemData data in itemDatas)
            //{
            //    dicItemDatas.Add(data.id, data);
            //}

            ////출력하기
            //foreach (KeyValuePair<int, ItemData> pair in dicItemDatas)
            //{
            //    Console.WriteLine("key: {0}, val: {1} {2}", pair.Key, pair.Value.name, pair.Value.damage);
            //}

        }
    }
}
using System;

namespace HelloWorld
{
    public class BudgetData
    {
        public int id;
        public string name;
        public int type;
    }
}
더보기
using System;

namespace HelloWorld
{
    public class ItemData
    {
        public int id;
        public string name;
        public float damage;
    }
}

수정 - enum타입 추가

using System;
using System.IO;    //using 지시문으로 네임스페이스 추가
using Newtonsoft.Json;
using System.Collections.Generic; 
using System.Linq;      
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld
{
    class App
    {
        public enum eBudgetType
        {
            Gold, Diamond, Sapphire, Ruby
        }

        //생성자
        public App()
        {
            //1. json파일 변수에 넣고 파일의 문자들을 읽어들여서 변수에 넣기
            //2. 역직렬화 하기 (배열. JsonConvert.DeserializeObject<타입>(json값)
            //3. 배열의 요소들을 Dictionary에 추가하기 (foreach문 사용)
            //4. Dictionary에 잘 추가됐는지 출력해서 확인하고 마무리.

            string path = "./budget_data.json";
            string json = File.ReadAllText(path);
            //Console.WriteLine(json);

            //역직렬화 하기
            BudgetData[] budgetDatas = JsonConvert.DeserializeObject<BudgetData[]>(json);

            Dictionary<int, BudgetData> dicBudgetDatas = new Dictionary<int, BudgetData>();

            foreach (BudgetData data in budgetDatas)
            {
                dicBudgetDatas.Add(data.id, data);
            }

            foreach (KeyValuePair<int, BudgetData> pair in dicBudgetDatas)
            {
                BudgetData data = pair.Value;
                Console.WriteLine("key: {0}, val: {1} {2}", data.id, data.name, (eBudgetType)data.type);
            }
        }
    }
}

 

'C# > 수업 내용' 카테고리의 다른 글

json저장, 불러오기  (0) 2021.12.24
파일 읽기, 역직렬화 연습 2  (0) 2021.12.24
람다식 연습 15 (Comparision)  (0) 2021.12.24
람다식 연습 8 (Action)  (0) 2021.12.24
람다식 연습 7 (Func) - 피자  (0) 2021.12.24