c# - 为什么我的 JSON 数据没有使用 Unitys JsonUtility 正确反序列化?
问题描述
我想访问国际空间站的实时位置,但是反序列化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);
}
这是我的国际空间站课程:
[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; }
}
Debug.Log 给了我以下信息:
{"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”。我很好奇为什么这不起作用。谢谢你的帮助!
解决方案
我最终从 AssetStore 导入了 JsonDotNet。在我的脚本中,我添加了:
using Newtonsoft.Json;
并更换
JsonUtility.FromJson<ISS>(jsonString)
使用 JsonDotNet 的反序列化函数:
JsonConvert.DeserializeObject<ISS>(jsonString);
这使它工作。
推荐阅读
- python - 使用 numpy 逐行连接不同大小的数组
- vue.js - Nuxt.js:客户端在生产中失败,但在开发期间工作
- python - Pytest-django:测试后无法删除数据库
- javascript - 用没有css的js改变html元素的位置
- android - 寻找避免在共享首选项中覆盖键值的最佳方法
- nlp - Doc2Vec vs Avg Word Vectors:哪个更适合情感分析?
- java - 使用正则表达式从字符串中提取数据
- ios - 将 UIPickerView 放在 UIAlertController 的中心
- android - 我的 recyclerview 适配器只是加载第一个视图,
- android - 从样式加载这些属性时,一个或多个布局缺少布局高度和布局宽度错误