c# - 无法反序列化当前 JSON 错误
问题描述
这是我当前使用 newtonsoft.json 反序列化的代码
Crop[] crops = JsonConvert.DeserializeObject<Crop[]>(Globals.cropInfoJson.text);
foreach(Crop crop in crops)
{
Debug.Log(crop.name);
if (crop.name == type.ToString())
{
currentStage = crop.currentStage;
maxStage = crop.maxStage;
currentLifeTime = crop.currentLifeTime;
nutritionalValue = crop.nutritionalValue;
timeToGrow = crop.timeToGrow;
}
}
[System.Serializable]
public class Crop
{
public string name;
public float currentStage;
public float maxStage;
public float currentLifeTime;
public float nutritionalValue;
public float timeToGrow;
}
这是我的json:
{
"corn": {
"name": "corn",
"currentStage": 1,
"maxStage": 3,
"currentLifeTime": 0,
"nutritionalValue": 3,
"timeToGrow": 360
},
"carrots": {
"name": "carrots",
"currentStage": 1,
"maxStage": 3,
"currentLifeTime": 0,
"nutritionalValue": 3,
"timeToGrow": 360
}
}
我得到的错误是: 无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'Crop[]',因为该类型需要 JSON 数组(例如 [1,2,3])来反序列化正确。
任何帮助是极大的赞赏!
解决方案
您的 JSON 应该如下所示
[
{
"name": "corn",
"currentStage": 1,
"maxStage": 3,
"currentLifeTime": 0,
"nutritionalValue": 3,
"timeToGrow": 360
},
{
"name": "carrots",
"currentStage": 1,
"maxStage": 3,
"currentLifeTime": 0,
"nutritionalValue": 3,
"timeToGrow": 360
}
]
玉米和胡萝卜是数组项。此外,您的课程应该如下所示。
public class Crop
{
public string name { get; set; }
public float currentStage { get; set; }
public float maxStage { get; set; }
public float currentLifeTime { get; set; }
public float nutritionalValue { get; set; }
public float timeToGrow { get; set; }
}
推荐阅读
- php - 使用 PHP 重新流式传输 Shoutcast/Icecast 流
- .net - 异常“对 *.svc 的 HTTP 请求已超过分配的超时...”是什么类型的异常?
- java - Gradle - 具有公共模块依赖项的多项目
- python - 使用 Python 绘制蝴蝶曲线
- clojure - 是否可以从稳定分支上的 leiningen 存储库的克隆安装 lein?
- javascript - PWA 服务工作者中的混合缓存策略
- python - 用窗口迭代数据框
- firebase - Flutter 与 Firestore:StreamBuilder 与 StreamProvider
- c++ - C++ 中的嵌套包含
- css - 动态 css 问题( transform: translateY(30px) !important )