data

ㅋㅋ·2022년 9월 1일

데이터를 로드하는 인터페이스를 구현

public interface ILoader<Key, Item>
{
    Dictionary<Key, Item> MakeDic();
    bool Validate();
}

데이터를 불러오기 위해 로더와 데이터 두 개의 클래스를 구현

public class ShopData
{
	public int ID;
	public int name;
	public ShopConditionType condition;
	...
}

데이터 클래스는 불러올 데이터들을 멤버 변수로만 가지고 있음

public class ShopDataLoader : ILoader<int, ShopData>
{
	[XmlElement("ShopData")]
	public List<ShopData> _shopDatas = new List<ShopData>();

	public Dictionary<int, ShopData> MakeDic()
	{
		Dictionary<int, ShopData> dic = new Dictionary<int, ShopData>();

		foreach (ShopData data in _shopDatas)
			dic.Add(data.ID, data);

		return dic;
	}

	...
}

로더 클래스는 파일로부터 실제 데이터 파싱하여 읽어오고

데이터 클래스로 만들어 dictionary로 만들어 반환


xml 파일이 데이터 list로 들어오는 부분은 아래와 같은데 잘 이해가 가진 않는다

private Loader LoadXml<Loader, Key, Item>(string name) where Loader : ILoader<Key, Item>, new()
{
	XmlSerializer xs = new XmlSerializer(typeof(Loader));
    TextAsset textAsset = Resources.Load<TextAsset>("Data/" + name);
    using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(textAsset.text)))
        return (Loader)xs.Deserialize(stream);
}

text asset을 읽어온 후 해당 데이터들을 deserialize하며

자동으로 list에 넣는 것으로 생각 됨

0개의 댓글