unity5.3からJsonUtilityが追加されたとのことで、それを使って展開しようとしました。
以下のように1階層であれば展開することに成功しました。
受信json {"status":"ok","notice":"-"}
c#
1 class TestScript : MonoBehaviour { 2 class ResData { 3 public string status = "ok"; 4 public string notice = ""; 5 } 6 // 略 7 void ExecJsonParse (string json) { 8 ResData resData = JsonUtility.FromJson<ResData>(json); 9 Debug.Log("status=" + resData.status); 10 Debug.Log("notice=" + resData.notice); 11 }
以下のように2階層にした場合に2階層目のuser情報が取得できませんでした。
受信json {"status":"ok","notice":"-","user":{"name":"taro","id":4}}
==1パターン目==
c#
1 class TestScript : MonoBehaviour { 2 class ResData { 3 public string status = "ok"; 4 public string notice = ""; 5 public ResUser user; 6 } 7 class ResUser { 8 public int id = 0; 9 public string name = ""; 10 } 11 // 略 12 void ExecJsonParse (string json) { 13 ResData resData = JsonUtility.FromJson<ResData>(json); 14 Debug.Log("status=" + resData.status); 15 Debug.Log("notice=" + resData.notice); 16 Debug.Log("user=" + resData.user);// *1 17 Debug.Log("user.id=" + resData.user.id); // *2 18 }
*1のところは空でした。
*2のところで以下エラーメッセージがでました。
NullReferenceException: Object reference not set to an instance of an object
==2パターン目==
以下のようにuserの型をstringにしてuserの部分のみjsonで取得できるのかな?と試してみましたが、userjsonには空データが戻って来ました。
class ResData { public string status = "ok"; public string notice = ""; public string user; } Debug.Log("user=" + resData.user);// ここが空
2階層目のuserのjson展開して取得する方法が知りたいです。
==3パターン目(追記2017/11/9 11:56)==
ResDataとResUserを個別のクラスにしましたがパターン1と同様のエラーでした。
ResData.cs
c#
1public class ResData { 2 public string status = "ok"; 3 public string notice = ""; 4 public ResUser user; 5}
ResUser.cs
c#
1public class ResUser { 2 public int id = 0; 3 public string name = ""; 4}
TestScript.cs
c#
1ResData resData = JsonUtility.FromJson<ResData>(json); 2Debug.Log("user=" + resData.user);// ここが空 3Debug.Log("user=" + resData.user.id);// ここでパターン1の[*2]エラー
==4パターン目(追加2017-11-09 12:41)==
using System;
[Serializable]
class ResData {
public string status = "ok";
public string notice = "";
public ResUser user;
}
[Serializable]
class ResUser {
public int id = 0;
public string name = "";
}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/09 03:41