首页 > 解决方案 > 无法反序列化当前 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])来反序列化正确。

任何帮助是极大的赞赏!

标签: c#unity3djson.net

解决方案


您的 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; }
}

推荐阅读