차트 데이터가 타입무시하고 모두 스트링으로 저장되는거 보고
테이블데이터도 전부 스트링으로 변환해서 저장한다음 리플렉션 이용해서 파싱하는데 다들 어떤식으로 사용하고 계신지 궁금합니다.
우선 제가 사용하는 방식 적어봅니다.
전 이렇게 사용하니 클라단에서 데이터 클래스만 잘 만들면 그에 맞춰서 파싱할 수 있어서 크게 불편함은 없던데
더 좋은 방법이 있으면 의견 주세요.
[System.Serializable]
public class SampleData
{
public int item_id;
public string name;
public int grade;
}
private T ParseBackendData<T>(JsonData json) where T : new()
{
T data = new T();
var fields = typeof(T).GetFields();
for (int i = 0; i < fields.Length; ++i)
{
if (fields[i].FieldType == typeof(int))
{
if (json.Keys.Contains(fields[i].Name))
fields[i].SetValue(data, int.Parse(json[fields[i].Name]["S"].ToString()));
else
fields[i].SetValue(data, 0);
}
else if (fields[i].FieldType == typeof(string))
{
if (json.Keys.Contains(fields[i].Name))
fields[i].SetValue(data, json[fields[i].Name]["S"].ToString());
else
fields[i].SetValue(data, "");
}
else if (fields[i].FieldType == typeof(float))
{
if (json.Keys.Contains(fields[i].Name))
fields[i].SetValue(data, float.Parse(json[fields[i].Name]["S"].ToString()));
else
fields[i].SetValue(data, 0.0f);
}
else if (fields[i].FieldType == typeof(bool))
{
if (json.Keys.Contains(fields[i].Name))
fields[i].SetValue(data, bool.Parse(json[fields[i].Name]["S"].ToString()));
else
fields[i].SetValue(data, false);
}
else if (fields[i].FieldType == typeof(DateTime))
{
if (json.Keys.Contains(fields[i].Name))
{
string time = json[fields[i].Name]["S"].ToString();
fields[i].SetValue(data, DateTime.Parse(time));
}
else
fields[i].SetValue(data, new DateTime(0));
}
else
Debug.LogError("Wrong field type");
}
return data;
}
SampleData data = ParseBackendData<SampleData>(json["rows"][0]);