无法通过JsonUtility读取JSON

时间:2017-03-03 09:22:57

标签: c# json unity3d

我从我的服务器中提取Json数据并打算将其读入配置文件。 代码一直运行到userProfile1 = JsonUtility.FromJson<UserProfile>(www.text);并停止。我尝试在之前和之后调试调试行,之后调试永远不会触发。

我认为这个问题可能与Unity的JsonUtility如何期望数据格式有关,但我不确定究竟是什么因为我没有得到任何错误。

string baseurl = "http://55.55.55.55/api/";
public string loginId = "test@spam.com";
public UserProfile userProfile1;

void Start()
{
    userProfile1 = new UserProfile();    
    StartCoroutine(GetUserProfile(loginId));
}

IEnumerator GetUserProfile(string email)
{
    string url = baseurl + "users/email/" + email;

    // Call server
    WWW www = new WWW(url);

    yield return www;

    // Read returned user profile
    if (www.error == null)
    {
        userProfile1 = JsonUtility.FromJson<UserProfile>(www.text);
    }
    else
    {
        Debug.Log("WWW Error: " + www.error);
    }
}

这里是个人资料的类:

[System.Serializable]
public class UserProfile
{
    public string _id;
    public string first_name;
    public string last_name;
    public string email;
    public string nick;
    public string join_date;
    public int age;
    public string sex;
    public int inventory_slot;
    public int __v;
}

这里是www.text

抓取的来自服务器的Json数据
[
    {
        "_id":"58b92a058f9565e76d364437",
        "first_name":"Test",
        "last_name":"Name",
        "email":"tinkle@spam.com",
        "nick":"Tinkle",
        "age":42,
        "sex":"male",
        "__v":0,
        "inventory_slot":200000,
        "join_date":"2017-02-26T00:36:10.266Z"
    }
]

1 个答案:

答案 0 :(得分:0)

您的模型没问题。我认为www.text根本没有价值。它可能仍然是null,因为数据尚未到达。我建议你应该做的是:

IEnumerator GetUserProfile(string email, Action<string> complete)
    {
        string url = baseurl + "users/email/" + email;
        // Call server
        WWW www = new WWW(url);
        yield return www;
        complete(www.text);
    }

你应该将你的StartCoroutine改为:

 StartCoroutine(GetUserProfile(loginId, (data) =>
                    {
              var userProfile1 = JsonUtility.FromJson<UserProfile>(data);
  }));

希望它有所帮助!

P.S。或者您知道什么,我开始认为问题在于您传递的是List。尝试将JsonUtility.FromJson<UserProfile>(data)更改为JsonUtility.FromJson<List< UserProfile>>(data)