Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(61评价)
价格: 2208.00元
一个使用Json 解析文件的问题,麻烦老师看看我哪错了?
ws35ws35发起了问答2019-02-28
1
回复
262
浏览

代码基本是复制Sandy老师,存档与读档的代码,可以正常建立存档的Save.json文件,但是读档解析的时候会报错,报错位置我在代码里标注。

报错类型:ArgumentNullException: Argument cannot be null.

我的Save类

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Save {

    public int Gold;//钱
    public int Daily_target;//每日指标
    public int Current_pressure;//当前压力
    public int Days;//天数
    public int MissonCount;
    public List<int> CardId = new List<int>();
    public List<int> EqitemID = new List<int>();
    public List<int> Energy = new List<int>();
    public List<List<int>> EqitemSkillID = new List<List<int>>();
    public List<int> SkillID = new List<int>();
    public List<int> SkillLv = new List<int>();


}

 

我的SaveJson 方法:

public void SaveGame()
    {
        Save save = CreatSave();
        string filePath = Application.dataPath + "/StreamingAssets" + "/Save.json";
       
        string saveJsonStr = JsonMapper.ToJson(save);
        
        StreamWriter sw = new StreamWriter(filePath);
        sw.Write(saveJsonStr);
        
        sw.Close();
        Debug.Log("存档成功");
        
    }

 

我的LoadJson 方法:

public void LoadByJson()
    {
        string filePath = Application.dataPath + "/StreamingAssets" + "/Save.json";
        if (File.Exists(filePath))
        {
             StreamReader sr = new StreamReader(filePath);
             string jsonStr = sr.ReadToEnd();
             sr.Close();

           Save save = JsonMapper.ToObject<Save>(jsonStr);  //报错的位置!!!!!!
           LoadGame(save);
            sr.Close();
        }
        else
        {
            Debug.Log("存档文件不存在");
        }
    }

我的 CreatSave 方法:

public Save CreatSave()
    {
        Save save = new Save
        {
            Gold = GameManger.instance.Gold,
            Daily_target = GameManger.instance.Daily_target,
            Current_pressure = GameManger.instance.Current_pressure,
            Days = GameManger.instance.Days,
            MissonCount = Missonmanger.instance.MissonFinshCount
        };
       foreach (var item in Inventory.instance.GetComponentsInChildren<ItemUI>())
        {
            save.CardId.Add(item.CardId);
        }
        foreach (var item in GameManger.instance.eqImage.Eqitemlist)
        {
            save.EqitemID.Add(item.CardId);
            save.Energy.Add(item.EqItemEnergy);
            List<int> temp = new List<int>();
            foreach (var item1 in item.PersonSkilllist)
            {

                temp.Add(item1.Id);
            }
            save.EqitemSkillID.Add(temp);
        }
        foreach (var item in SkillPanel.instance.SkillUILIst)
        {
            save.SkillID.Add(item.id);
            save.SkillLv.Add(item.Skilllv);
        }
        return save;
    }

 

我的通过存档建立的 Save.json文件:

{"Gold":0,"Daily_target":1600,"Current_pressure":100,"Days":1,"MissonCount":0,"CardId":[1,5,1,4,5,4,3,2,2,2,1,5],"EqitemID":[3,4,3],"Energy":[100,100,100],"EqitemSkillID":[[10],[21],[25]],"SkillID":[10,21,25],"SkillLv":[1,1,1]}

所有回复
  • 空瓶子 2019-02-28

    你可以在报错的那一行下面,打印一下save是不是空的。

    报的错是哪一行,不一定就真的是哪一行。

    如果它是空的,说明是读取json的代码出了问题。

    你可以新创建一个新的脚本,新的场景,只有读取的代码,进行测试。

    如果他不是空的,说明是继续往下的代码出了问题。

    继续debug。。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!