C#프로그래밍

JSON

다모아 2023. 7. 27. 17:44

Item 클래스

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

namespace FakeInventory
{
    public class Item
    {
        ItemInfo info;
        public string Name
        {
            get
            {
                ItemData data = DataManager.instance.GetItemData(this.info.id);
                return data.name;
            }
        }
        //생성자
        public Item(ItemInfo info)
        {
            this.info = info;
        }

        public int GetID()
        {
            return this.info.id;
        }

        public int GetDamage()
        {
            return this.info.damage;
        }
    }
}

ItemData 클래스

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

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


ItemInfo 클래스

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

namespace FakeInventory
{
    //저장객체
    public class ItemInfo
    {
        public int id;
        public int damage;

        //생성자
        public ItemInfo(int id, int damage)
        {
            this.id = id;
            this.damage = damage;
        }
    }
}

 

DataManager

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft;
using Newtonsoft.Json;
namespace FakeInventory
{
    public class DataManager
    {

        public static readonly DataManager instance = new DataManager();
        private Dictionary<int, ItemData> dicItemDatas = new Dictionary<int, ItemData>();

        private DataManager()
        {

        }

        //아이템 데이터를 로드
        public void LoadItemDatas()
        {
            string json = File.ReadAllText("./item_data.json");
            //역직렬화
            ItemData[] arr = JsonConvert.DeserializeObject<ItemData[]>(json);
            //dictionary에 옮겨담기 .. foreach 랑 --> 인스턴스 필요
            foreach (ItemData data in arr)
            {
                this.dicItemDatas.Add(data.id, data);
            }
            Console.WriteLine(this.dicItemDatas.Count);
            
        }

        public ItemData GetItemData(int id)
        {
            return this.dicItemDatas[id];
        }
    }
}

 

App

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

namespace FakeInventory
{
    public class App
    {
        Dictionary<int, ItemData> dicItemDatas;
        //생성자
        public App()
        {
            //게임 시작 전 게임에서 사용할 데이터 로드
            DataManager.instance.LoadItemDatas();

            //게임시작 : 기본무기 : 신규유저
            ItemData data = DataManager.instance.GetItemData(100);
            ItemInfo info = new ItemInfo(data.id, data.damage);
            Item item = new Item(info);
            int id = item.GetID();
        }
    }
}

App

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

namespace FakeInventory
{
    public class App
    {
        Dictionary<int, ItemData> dicItemDatas;
        //생성자
        public App()
        {
            //게임 시작 전 게임에서 사용할 데이터 로드
            DataManager.instance.LoadItemDatas();

            //파일이 있는가?
            if (File.Exists("./item_info.json"))
            {
                //있다 : 기존유저
                Console.WriteLine("기존유저입니다.");
                string json = File.ReadAllText("./item_info.json");
                //역직렬화 문자열 -> 객체 DeserializeObject
                ItemInfo info = JsonConvert.DeserializeObject<ItemInfo>(json);
                Item item = new Item(info);
                int id = item.GetID();
                string name = item.Name;
                int damage = item.GetDamage();

                Console.WriteLine("ID: {0}", id);
                Console.WriteLine("이름: {0}", name);
                Console.WriteLine("공격력: {0}", damage);
            }
            else
            {
                //없다 : 신규유저
                Console.WriteLine("신규유저입니다.");
                //게임시작 : 기본무기 : 신규유저
                ItemData data = DataManager.instance.GetItemData(100);
                ItemInfo info = new ItemInfo(data.id, data.damage);
                Item item = new Item(info);
                int id = item.GetID();
                string name = item.Name;
                int damage = item.GetDamage();

                Console.WriteLine("ID: {0}", id);
                Console.WriteLine("이름: {0}", name);
                Console.WriteLine("공격력: {0}", damage);

                //직렬화 SerializeObject
                //객체 -> 문자열
                string json = JsonConvert.SerializeObject(item.GetInfo());
                Console.WriteLine(json);
                //파일로 저장
                File.WriteAllText("./item_info.json", json);
            }
        }
    }
}

ItemInfo

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

namespace FakeInventory
{
    //저장객체
    public class ItemInfo
    {
        public int id;
        public int damage;

        //생성자
        public ItemInfo(int id, int damage)
        {
            this.id = id;
            this.damage = damage;
        }
    }
}

Item

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

namespace FakeInventory
{
    public class Item
    {
        ItemInfo info;
        public string Name
        {
            get
            {
                ItemData data = DataManager.instance.GetItemData(this.info.id);
                return data.name;
            }
        }
        //생성자
        public Item(ItemInfo info)
        {
            this.info = info;
        }

        public int GetID()
        {
            return this.info.id;
        }

        public int GetDamage()
        {
            return this.info.damage;
        }

        public ItemInfo GetInfo()
        {
            return this.info;
        }
    }
}

DataManager

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft;
using Newtonsoft.Json;
namespace FakeInventory
{
    public class DataManager
    {

        public static readonly DataManager instance = new DataManager();
        private Dictionary<int, ItemData> dicItemDatas = new Dictionary<int, ItemData>();

        private DataManager()
        {

        }

        //아이템 데이터를 로드
        public void LoadItemDatas()
        {
            string json = File.ReadAllText("./item_data.json");
            //역직렬화
            ItemData[] arr = JsonConvert.DeserializeObject<ItemData[]>(json);
            //dictionary에 옮겨담기 .. foreach 랑 --> 인스턴스 필요
            foreach (ItemData data in arr)
            {
                this.dicItemDatas.Add(data.id, data);
            }
            Console.WriteLine(this.dicItemDatas.Count);
            
        }

        public ItemData GetItemData(int id)
        {
            return this.dicItemDatas[id];
        }
    }
}

ItemData

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

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


App
DataManager로 아이템 정보를 ItemData에 저장한다.
ItemInfo 에 id와 damage를 저장한다.
Item을 만든다.
id, name, damage의 정보를 Item에서 가져온다
직렬화 -- 객체 -> 문자열
파일 저장

ItemInfo
아이템데이터의 정보가 들어있다. ItemData에서 정보를 가져다 쓸 수 있음.

Item
GetID
GetDamage
GetInfo
로 정보 가져오기

DataManager
역직렬화 ,아이템 로드 및 ItemData[]로 Dictionary에 옮겨담기

ItemData
아이템데이터가 들어있다, item_data.json 파일의 내용이 들어있음. [생성자 필요 X]

 

name을 저장안하는건 id만 저장하면 name은 알아서 불러올 수 있다.

 

쪼개서 연습하기 -- 새로운 프로젝트로..연습

'C#프로그래밍' 카테고리의 다른 글

주말과제  (0) 2023.07.28
장비 착용, 몬스터 공격, 인벤토리, 아이템 지급  (0) 2023.07.28
엑셀데이터를 JSON, JSON online viewer  (0) 2023.07.27
람다, Action<T> , Func<T>  (0) 2023.07.27
대리자, 무명메서드  (0) 2023.07.27