JSON.net-C#:反序列化字典时为空引用

时间:2019-01-31 18:55:17

标签: c# json unity3d json.net deserialization

我在反序列化先前序列化的字典时遇到问题。

字典使用的是自定义字段(<int, DialogueSave>),所以我想知道这是否不起作用的原因是因为JSON.net无法将字典反序列化为除<string,string>以外的任何形式...在哪种情况下,我不知道该怎么办或如何解决该问题。

以下是相关代码:

[System.Serializable]
    public class DialogueSave
    {
        public string dialogue;
        public int endActionID;
        // other stuff
    }

    [System.Serializable]
    public class DialogueSaveDictionary
    {
        [SerializeField] public Dictionary<int, DialogueSave> saveDictionary;
    }

    void Save()
    {

    DialogueSaveDictionary saveData = new DialogueSaveDictionary();
    saveData.saveDictionary = new Dictionary<int, DialogueSave>();

    // trying to read Json saved file and deserialize in order to add new 
    // items to dictionary and serizalize again
    string jsonSavedDialoguePath = Application.dataPath + "/dialogueSave.json";
    StreamReader reader = new StreamReader(jsonSavedDialoguePath);

    saveData.saveDictionary = JsonConvert.DeserializeObject<Dictionary<int, DialogueSave>>(reader.ReadToEnd());

    // add new data on top of already saved data
    }

此代码未出现错误,但是当我开始通过字典条目将实际的新数据添加到反序列化的已保存数据中时,我得到了NullReferenceException反序列化,由于某种原因,JSON给了我一个空字典< / p>

编辑: 这是json序列化为

的一个示例
{
  "saveDictionary": {
    "123000": {
      "dialogue": "hey",
      "endActionID": 2
    },
    "123001": {
      "dialogue": "bye",
      "endActionID": 1
    }
}

0 个答案:

没有答案