|
|
(同じ利用者による、間の4版が非表示) |
行1: |
行1: |
− | ==jsonを扱い方==
| + | [[Unity/Csharp/Json/JsonUtility]] |
− | Unity 5.3からJsonUtilityが使えるようになったので、JsonUtilityを使う。 | + | |
| | | |
− | 使いたいpropertyだけ定義すればそれだけを取得することもできる。
| + | [[Unity/Csharp/Json/NewtonJson]] |
− | | + | |
− | ==json展開==
| + | |
− | json
| + | |
− | {"status":"ok","notice":"message1","user":{"id":1,"name":"taro","likes":["tyoko","prin"]}}
| + | |
− | | + | |
− | サンプル
| + | |
− | using System;
| + | |
− | public class AuthScript : MonoBehaviour {
| + | |
− | [Serializable]
| + | |
− | class ResData {
| + | |
− | public string status = "ok";
| + | |
− | public string notice = "";
| + | |
− | public ResUser user;
| + | |
− | }
| + | |
− | [Serializable]
| + | |
− | class ResUser {
| + | |
− | public int id = 0;
| + | |
− | public string name = "";
| + | |
− | public string[] likes;
| + | |
− | }
| + | |
− | void ExecJsonParse (string json) {
| + | |
− | ResData resData = JsonUtility.FromJson<ResData>(json);
| + | |
− | Debug.Log("status=" + resData.status);
| + | |
− | Debug.Log("notice=" + resData.notice);
| + | |
− | Debug.Log("user.name=" + resData.user.name);
| + | |
− | foreach (string like in resData.user.likes) {
| + | |
− | Debug.Log("like=" + like);
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | 以下エラーとなる場合は[Serializable]が足りない場合がある
| + | |
− | NullReferenceException: Object reference not set to an instance of an object
| + | |
− | | + | |
− | | + | |
− | [Serializable]を追加して以下エラーとなる場合はusing System;が足らない可能性がある。
| + | |
− | error CS0246: The type or namespace name `Serializable' could not be found. Are you missing an assembly reference?
| + | |
− | | + | |
− | ==jsonからオブジェクトへ==
| + | |
− | User user = new User();
| + | |
− | string json = JsonUtility.ToJson(user);
| + | |
− | | + | |
− | ==Listもjson対応させる方法==
| + | |
− | 通常Listは[Serializable]が記述されていないため、json化できないが、リンク先のクラスを噛ませればできる。
| + | |
− | | + | |
− | Serialization.cs
| + | |
− | <pre>
| + | |
− | using UnityEngine;
| + | |
− | using System.Collections;
| + | |
− | using System.Collections.Generic;
| + | |
− | using System;
| + | |
− | [Serializable]
| + | |
− | public class Serialization<T>
| + | |
− | {
| + | |
− | [SerializeField]
| + | |
− | List<T> target;
| + | |
− | public List<T> ToList() { return target; }
| + | |
− | | + | |
− | public Serialization(List<T> target)
| + | |
− | {
| + | |
− | this.target = target;
| + | |
− | }
| + | |
− | }
| + | |
− | </pre>
| + | |
− | | + | |
− | UserにもSerializableなどがついてる必要がある
| + | |
− | | + | |
− | User.cs
| + | |
− | <pre>
| + | |
− | [Serializable]
| + | |
− | public class User
| + | |
− | {
| + | |
− | [SerializeField]
| + | |
− | public string name = "";
| + | |
− | [SerializeField]
| + | |
− | public int age = 0;
| + | |
− | }
| + | |
− | </pre>
| + | |
− | | + | |
− | | + | |
− | 呼び出し
| + | |
− | <pre>
| + | |
− | string json = JsonUtility.ToJson(new Serialization<User>(users)); // {"target":[{"name":"taro","age":19}]}
| + | |
− | List<Enemy> users = JsonUtility.FromJson<Serialization<User>>(json).ToList();
| + | |
− | </pre>
| + | |
− | | + | |
− | 参考:http://kou-yeung.hatenablog.com/entry/2015/12/31/014611
| + | |
− | | + | |
− | ==公式JsonUtility==
| + | |
− | https://docs.unity3d.com/ScriptReference/JsonUtility.html
| + | |