신입 개발자 공부 과정

01/06 과제 본문

C#/수업 내용

01/06 과제

Lewisjkim 2022. 1. 7. 00:29

Q1.해당 내용을 엑셀 내용으로 다음과 같이 작성해본다.

1. JSON파일을만든다

2. JSON파일을 읽는다

3. 맵핑클래스를 만든다

4. 읽어온 json 문자열을 역직렬화 한다

5. 사전에 넣는다

Json 뷰어에서의 모습

Json text 형식

[
  {
    "id": 500,
    "name": "레저릭의 호기",
    "level": 41,
    "goal": "소금 평원에 있는 래저릭에게 시포리움 부스터를 찾아다 줘야 합니다."
  },
  {
    "id": 501,
    "name": "안전제일",
    "level": 41,
    "goal": "가젯잔에 있는 쉬리브에게 시포리움 부스터를 가져가야 합니다."
  },
  {
    "id": 502,
    "name": "일어나라, 흑요암이여!",
    "level": 46,
    "goal": "검은 라소릭과 흑요암을 쓰러뜨리고, 그 증거로 검은 라소릭의 머리카락과 흑요암 심장을 아이언포지에 있는 소리우스에게 가져가야 합니다."
  }
]

1. JSON파일을만든다

1)메모장에 json 텍스트를 붙여넣기
2)모든파일형식으로 'quest.data.json'으로 저장

2. JSON파일을 읽는다

1) 파일 탐색기에서 폴더 열기를 해준다
2) 해당 프로젝트의 app 경로에 들어간다.
3)위 파일 경로에 붙여넣기 한다.

 

4) 위와 같이 System.IO를 추가해 주고 File.ReadAllText("./파일이름"); 으로 매개변수 json에 파일 내용을 할당한다. Console.WriteLine(json);으로 해당 파일 내용을 출력 하여 확인 할 수 있다.

 

3. 맵핑클래스를 만든다

2)dictionary에 형식에 맞게 questData값과 변수를 대입하고 // 사전에서 key값을 선택해 출력해준다.
output

4. 읽어온 json 문자열을 역직렬화 한다

1) 도구->Nuget 패키지 관리자->솔루션용 NuGet 패키지 관리를 클릭
2) Newtonsoft.Json를 클릭 후 오른쪽 프로젝트에서 App을 체크후 설치해준다. 그러면 우측 참조란에 Newtonsoft.Json이 추가되어있는 것을 확인 할 수 있다. 단, 프로젝트마다 다운받아야 된다.
3)Newtonsoft.Json추가 와  json deserialize해준다
4)QuestData Class에 맴버 변수를 선언(없으면 json내 값들이 출력안된다)
5)메인 클래스에서 출력
6)output

5. 사전에 넣는다

1)Dictionary 생성

 

Q2.본인이 작성한 내용을 엑셀에 작성한 후 다음과 같이 작성해본다. (5번)

1. JSON파일을만든다

2. JSON파일을 읽는다

3. 맵핑클래스를 만든다

4. 읽어온 json 문자열을 역직렬화 한다

5. 사전에 넣는다

 

Q2-1

-----

HealtResult

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class HealthResult
    {
        public string name;
        public int height;
        public int weight;
        public string result;
    }
}

App

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;//추가해주고
using Newtonsoft.Json;//추가해주고

namespace ConsoleApp
{
    class App
    {
        

        //생성자
        public App()
        {
            string json = File.ReadAllText("./HealthResult.data.json");
            Console.WriteLine(json);

            
            //json 문자열 역직렬화
            HealthResult[] healthResult = JsonConvert.DeserializeObject<HealthResult[]>(json); //json 문자열을 역직렬화 하고나서 배열 healthResult에 대입
            foreach(HealthResult results in healthResult)
            {
                Console.WriteLine("이름:{0}\n 키:{1}\n 몸무게:{2}\n 결과:{3}\n", results.name, results.height, results.weight, results.result);
                dicresult.Add(results.name, results);//각 배열 값들을 dictionary에 입력
            }

            //매핑클래스 
            HealthResult data = dicresult["Lewis"];
            Console.WriteLine("------------------\n이름:{0}\n 키:{1}\n 몸무게:{2}\n 결과:{3}", data.name, data.height, data.weight, data.result);
        }
        //Dictionary 생성
        Dictionary<string, HealthResult> dicresult = new Dictionary<string, HealthResult>();

    }
}

Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}

Output

 

Q2-2

-----

Quest

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Quest
    {
        public string name;
        public int level;
        public string goal;
        public string prize;
    }
}

App

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;//추가해주고
using Newtonsoft.Json;//추가해주고

namespace ConsoleApp
{
    class App
    {
        //Dictionary 생성
        Dictionary<string, Quest> dicQuest = new Dictionary<string, Quest>();

        //생성자
        public App()
        {
            //json file 읽기
            string json = File.ReadAllText("./Quest.data.json");
            //Console.WriteLine(json);
            //json 문자열 역직렬화
            Quest[] quests = JsonConvert.DeserializeObject<Quest[]>(json);
            //딕셔네리에 json object 넣기
            foreach(Quest quest in quests)
            {
                Console.WriteLine("name:{0}\n level:{1}\n goal:{2}\n prize{3}\n", quest.name, quest.level, quest.goal, quest.prize);//이 값들을
                dicQuest.Add(quest.name, quest);//딕셔네리에 name, value를 넣었다
            }
            //매핑클래스 (딕셔네리값을 대입)
            Quest data = dicQuest["채집은 해봤어?"];
            Console.WriteLine("----------------\n name:{0}\n level:{1}\n goal:{2}\n prize{3}\n", data.name, data.level, data.goal, data.prize);
        }
        

    }
}

Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}

Output

Q2-3

-----

StudentList

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class StudentList
    {
        public int number;
        public string name;
        public int phonenumber;
    }
}

App

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;//추가해주고
using Newtonsoft.Json;//추가해주고

namespace ConsoleApp
{
    class App
    {
        //Dictionary 생성
        Dictionary<int, StudentList> dicList = new Dictionary<int, StudentList>();

        //생성자
        public App()
        {
            //json file 읽기
            string json = File.ReadAllText("./StudentList.data.json");
            //Console.WriteLine(json);

            //json 문자열 역직렬화
            StudentList[] studentLists = JsonConvert.DeserializeObject<StudentList[]>(json);
            //딕셔네리에 json object 넣기
            foreach(StudentList list in studentLists)
            {
                Console.WriteLine($"number:{list.number}\n name:{list.name}\n phone number:{list.phonenumber}");
                dicList.Add(list.number, list);
            }
            //매핑클래스 (딕셔네리값을 대입)
            StudentList data = dicList[3];
            Console.WriteLine($"-------------------\n number:{data.number}\n name:{data.name}\n phone number:{data.phonenumber}");
        }
        

    }
}

Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}

Output

Q2-4

-----

Character

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Character
    {
        public string name;
        public string job;
        public string weapon;
        public string explaination;
    }
}

App

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;//추가해주고
using Newtonsoft.Json;//추가해주고

namespace ConsoleApp
{
    class App
    {
        Dictionary<string, Character> dicCharacter = new Dictionary<string, Character>();

        public App()
        {
            string json = File.ReadAllText("./Character.data.json");
            //Console.WriteLine(json);
            Character[] characters = JsonConvert.DeserializeObject<Character[]>(json);

            foreach(Character character in characters)
            {
                Console.WriteLine("name:{0}\n job:{1}\n weapon{2}\n explaination{3}\n", character.name, character.job, character.weapon, character.explaination);
                dicCharacter.Add(character.name, character);
            }
            Character data = dicCharacter["모로모로"];
            Console.WriteLine("-----------\n name:{0}\n job:{1}\n weapon{2}\n explaination{3}\n", data.name, data.job, data.weapon, data.explaination);
        }
    }
}

Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}

Output

Q2-5

-----

Moster

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Monster
    {
        public string name;
        public int level;
        public int damage;
        public int hp;
    }
}

App

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;//추가해주고
using Newtonsoft.Json;//추가해주고

namespace ConsoleApp
{
    class App
    {
        Dictionary<string, Monster> dicMonster = new Dictionary<string, Monster>();

        //생성자
        public App()
        {
            string json = File.ReadAllText("./Monster.data.json");
            //Console.WriteLine(json);
            //json file deserialize
            Monster[] monsters = JsonConvert.DeserializeObject<Monster[]>(json);
            foreach(Monster monster in monsters)
            {
                Console.WriteLine("name:{0}\n level:{1}\n damage:{2}\n hp:{3}\n", monster.name, monster.level, monster.damage, monster.hp);
                dicMonster.Add(monster.name, monster);
            }
            Monster data = dicMonster["Dark Dragon"];
            Console.WriteLine("----------------\n name:{0}\n level:{1}\n damage:{2}\n hp:{3}\n", data.name, data.level, data.damage, data.hp);
        }
    }
}

Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}

Output

후기:

처음에는 뭐가 뭔지도 모르겠었는데 이제는 입으로 말하면서 타이핑 할 수 있을 정도로 익숙해졌다.