* 문제점: Key값이 "info"로 들어감

1. WeaponInfo.cs

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

namespace LoadDataExample
{
    // 저장될(변화하는) 데이터 저장
    public class WeaponInfo
    {
        public int id;  // 아이디
        public int enforce; // 강화 수치

        // 생성자
        public WeaponInfo(int id, int enforce = 0)
        {
            this.id = id;
            this.enforce = enforce;
        }
    }
}

2. Item.cs

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

namespace LoadDataExample
{
    public class Item
    {
        public WeaponInfo Info
        {
            get;
            private set;
        }

        // 생성자
        public Item(WeaponInfo info)
        {
            this.Info = info;
        }
    }
}

3. Inventory.cs

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

namespace LoadDataExample
{
    public class Inventory
    {
        Random rand = new Random();
        public List<Item> ItemList { get; set; }

        // 생성자
        public Inventory()
        {
            this.ItemList = new List<Item>();
        }
        public void CreateItem(int id)
        {
            WeaponInfo info = new WeaponInfo(id);
            Item item = new Item(info);
            this.ItemList.Add(item);
        }

        public void AddItem()
        {
            int id = this.rand.Next(100, 104);
            WeaponInfo info = new WeaponInfo(id);
            Item item = new Item(info);
            this.ItemList.Add(item);
        }
    }
}

4. App.cs

using System;
using System.IO;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;

namespace LoadDataExample
{
    public class App
    {
        //생성자 
        public App()
        {
            Inventory inventory = new Inventory();

            bool exists = File.Exists("./weapon_info.json");
            if (exists)
            {
                Console.WriteLine("기존유저");
                //  메모장에 있는 걸 읽어옴
                string weaponInfoJson = File.ReadAllText("./weapon_info.json");
                //Console.WriteLine(weaponInfoJson);

                //역직렬화 : 문자열 -> 오브젝트
                inventory.ItemList = JsonConvert.DeserializeObject<List<Item>>(weaponInfoJson);

                // 아이템 추가
                inventory.AddItem();

                // 직렬화: 오브젝트 -> 문자열
                string serializedJson = JsonConvert.SerializeObject(inventory.ItemList);

                //string serializedJson = JsonConvert.SerializeObject(item.Info);
                Console.WriteLine(serializedJson);
                //저장 
                File.WriteAllText("./weapon_info.json", serializedJson);

            }
            else
            {
                Console.WriteLine("신규유저");
                //초기 아이템 지급 
                inventory.CreateItem(100);

                //직렬화 : 오브젝트 -> 문자열 
                string serializedJson = JsonConvert.SerializeObject(inventory.ItemList);
                Console.WriteLine(serializedJson);
                //저장 
                File.WriteAllText("./weapon_info.json", serializedJson);
            }
        }
    }
}

 

'C# > 수업 과제' 카테고리의 다른 글

for문 연습 문제  (0) 2022.06.10
디아블로 아이템 출력하기  (0) 2022.06.09

+ Recent posts