보통 c#에서 json파싱을 위해 [Newtonsoft.Json]을 많이 사용하곤 한다. 그런데 안드로이드 빌드 후 테스트 할 때, IL2CPP 컴파일 부분에서 에러가 발생한다
"Newtonsoft.Json.JsonSerializationException unable to find constructor to use for types"
위 문제를 해결된 파서가 없을까 하고 검색 해 보니, [Json.Net for Unity]라는 곳에서 해당 문제를 해결해 배포하고 있었다.
1. 설치
우선 패키지 매니저를 통해서, 설치하자. 이걸로 끝은 아니다. 지금 패키지 매니저에 올라간 버전은 아까 위의 문제가 해결된 버전이 아니다. 때문에 [프로젝트폴더/Packages/manifest.json]을 열어 해결된 버전으로 설치 해줘야 한다.
https://github.com/jilleJr/Newtonsoft.Json-for-Unity/issues/3
관련 이슈는 위 링크를 참고 하면 된다.
{
"scopedRegistries": [
{
"name": "Packages from jillejr",
"url": "https://registry.npmjs.org/",
"scopes": [
"jillejr"
]
}
],
"dependencies": {
"com.unity.package-manager-ui": "2.1.2",
- "jillejr.newtonsoft.json-for-unity": "12.0.1",
+ "jillejr.newtonsoft.json-for-unity": "12.0.1-patch-001",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.cloth": "1.0.0",
}
}
위 "dependencies"에서
["jillejr.newtonsoft.json-for-unity": "12.0.1-patch-001"] 으로 바꿔주자.
2. 사용 예
아래는 그냥 파싱하는 부분의 예시이다.
private void parseMonsterDataJson(string json_str)
{
if(String.IsNullOrEmpty(json_str))
return;
JObject json_object = JObject.Parse(json_str);
JObject version_token = (JObject)json_object["version"];
m_version_array[(int)SystemDataType.SYS_DATA_MONSTER] = (int)version_token["version"];
m_monster_data_list.Clear();
foreach(JObject item in (JArray)json_object["monster"])
makeMonsterData(m_monster_data_list, item);
}
private void makeMonsterData(Dictionary<MonsterType,MonsterData> parent, JObject item)
{
MonsterData data = new MonsterData();
data.m_id = (int)item["id"];
if(!Enum.TryParse<MonsterType>((string)item["type"],out data.m_type))
LogManager.Debug("MonsterData Error, "+(string)item["type"]+" is failed");
data.m_name = (string)item["name"];
data.m_desc = (string)item["desc"];
data.m_bal_id = (int)item["bal_id"];
data.m_skill_id_1 = (int)item["skill_id_1"];
data.m_skill_id_2 = (int)item["skill_id_2"];
data.m_skill_id_3 = (int)item["skill_id_3"];
data.m_reward_id_1 = (int)item["reward_id_1"];
data.m_reward_id_2 = (int)item["reward_id_2"];
data.m_reward_id_3 = (int)item["reward_id_3"];
data.m_reward_id_4 = (int)item["reward_id_4"];
data.m_reward_id_5 = (int)item["reward_id_5"];
data.m_reward_id_6 = (int)item["reward_id_6"];
parent[data.m_type] = data;
}
'게임을 만들자 > Unity' 카테고리의 다른 글
MacOS Unity, VisualStudio for Mac 디버깅 (0) | 2020.05.16 |
---|---|
Unity Android 웹뷰 띄우기 (1) | 2020.05.13 |
Unity, Shadero 2D Shader(쉐이더) 어셋 With Spine (1) | 2020.03.27 |
Unity New UI Builder 사용하기 (1) | 2020.03.11 |
Unity, Tiled 사용하기 (0) | 2020.03.07 |