我想访问ISS的实时位置,但使用JsonUtility.FromJson
进行反序列化会给我空值。
UnityWebRequest www = UnityWebRequest.Get("https://api.wheretheiss.at/v1/satellites/25544");
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError) {
Debug.Log(www.error);
}
else {
string jsonString = www.downloadHandler.text;
Debug.Log(jsonString);
ISS issData = JsonUtility.FromJson<ISS>(jsonString);
Debug.Log(issData.name);
}
这是我的ISS课程:
[System.Serializable]
public class ISS
{
public string name { get; set; }
public int id { get; set; }
public double latitude { get; set; }
public double longitude { get; set; }
public double altitude { get; set; }
public double velocity { get; set; }
public string visibility { get; set; }
public double footprint { get; set; }
public int timestamp { get; set; }
public double daynum { get; set; }
public double solar_lat { get; set; }
public double solar_lon { get; set; }
public string units { get; set; }
}
调试日志给了我以下信息:
{"name":"iss","id":25544,"latitude":-51.26475894394,"longitude":70.742077900276,"altitude":430.55414597218,"velocity":27557.250778742,"visibility":"daylight","footprint":4560.7731250695,"timestamp":1572781486,"daynum":2458790.9894213,"solar_lat":-15.053235454665,"solar_lon":359.70413044191,"units":"kilometers"}
Null
虽然它应该给我的名字是"iss",而不是"Null"。我很好奇为什么这不起作用。谢谢你的帮助!
请将类对象转换为JSON,并从中反转以识别问题。我已经给出了一个网络解决方案。请试试这个https://docs.unity3d.com/Manual/JSONSerialization.html
我最终从AssetStore导入了JsonDotNet。在我的脚本中,我添加了:
using Newtonsoft.Json;
并取代
JsonUtility.FromJson<ISS>(jsonString)
使用JsonDotNet:的反序列化函数
JsonConvert.DeserializeObject<ISS>(jsonString);
这使它发挥了作用。