十九RG 2024-07-16 10:43 采纳率: 22.2%
浏览 3
已结题

Unity LoadFromJson sy沒反應怎麽辦


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
/*
 * File.WriteAllTetx
 * 
 */
//[System.Serializable]
public class sysy2 : MonoBehaviour
{
    
    public Datadata sy = new Datadata { };


    private int sb = 0;


    /*public void Add2()
    {
        sb++;
        string path2 = "dudang" + sb + ".rg";

        string path = Path.Combine(Application.persistentDataPath, path2);
       
        string json=JsonUtility.ToJson(sy);
        //JsonUtility.FromJson<>();
        File.WriteAllText(path,json);
    }*/
    public void Load2()
    {
        sb++;
        string path2 = "dudang" + sb + ".rg";

        string path = Path.Combine(Application.persistentDataPath, path2);

        string json = File.ReadAllText(path);
        //JsonUtility.FromJson<>();

        sy=JsonUtility.FromJson<Datadata>(json);
    }
    public void add()
    {
        
        sb++;
        var path = "dudang" + sb + ".rg";

   
        
        string path2 = Path.Combine(Application.persistentDataPath, path);
        var json = JsonUtility.ToJson(this,true);
        Debug.Log(json);
        File.WriteAllText(path2, json);
        Debug.Log(path2);
    }
    public void Save()
    {
        
        var path = "dudang" + "1" + ".rg";
        string path2 = Path.Combine(Application.persistentDataPath, path);
        var json = JsonUtility.ToJson(sy, true);
        File.WriteAllText(path2, json);
        Debug.Log(json);
    }
    
    public void Load()
    {
        var path = "dudang" + "1" + ".rg";
        string path2 = Path.Combine(Application.persistentDataPath, path);
        string aa = File.ReadAllText(path2);
        Debug.Log(aa);
        sy = JsonUtility.FromJson<Datadata>(aa);
       
        Debug.Log(sy.a);
      
    }
 
    public void Delete()
    {
        for(int i = 1; i<= sb;i++)
        {
            var path = "dudang" + i + ".rg";
            string path2 = Path.Combine(Application.persistentDataPath, path);
            File.Delete(path2);
        }
        sb = 0;
    }
    
}
[System.Serializable]
public class Datadata
{

    public string a = "sb";
    public int x = 1;
}


  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-16 10:43
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的代码和问题列表,以下是一些建议和步骤,以帮助您解决Unity中使用JsonUtility从JSON加载数据时没有反应的问题:

    1. 确保JsonUtility的使用正确

      • 检查json字符串是否与Datadata类的结构匹配。可以使用在线的JSON格式化工具来验证JSON格式。
      • 确保Datadata类中的所有属性都是public的,因为JsonUtility只能序列化public字段。
    2. 验证文件路径和读写操作

      • 确保Application.persistentDataPath返回的路径是正确的,并且您的应用程序有权限读写该路径下的文件。
      • 使用File.Exists(path)来检查文件是否存在,这有助于调试文件路径问题。
    3. 检查Datadata类的结构

      • 您的Datadata类缺少[System.Serializable]属性。添加此属性以确保类可以被JsonUtility序列化和反序列化。
    4. 检查变量初始化

      • 在调用Load方法之前,确保sy变量已经被初始化。可以在StartAwake方法中进行初始化。
    5. 调试和日志记录

      • 在Load方法中添加更多的Debug.Log语句,输出关键变量的值和程序的状态信息,例如在读取文件前后打印文件内容。
    6. 处理异常和错误

      • 使用try-catch块来捕获可能发生的异常,并使用Debug.LogError来记录错误信息,这有助于识别问题所在。
    7. 测试不同的数据和场景

      • 在不同的数据集和不同的运行场景下测试Load方法,确保其鲁棒性。

    以下是修改后的代码示例,包括添加了[System.Serializable]属性,try-catch块,以及更多的Debug.Log语句:

    using System.IO;
    using UnityEngine;
    using System;
    
    [Serializable] // 添加了Serializable属性
    public class Datadata
    {
        public string a = "sb";
        public int x = 1;
    }
    
    public class sysy2 : MonoBehaviour
    {
        // ... 省略其他代码 ...
    
        public void Load()
        {
            var path = "dudang1.rg";
            string path2 = Path.Combine(Application.persistentDataPath, path);
    
            if (File.Exists(path2)) // 检查文件是否存在
            {
                try
                {
                    string json = File.ReadAllText(path2);
                    Debug.Log("Reading JSON: " + json); // 输出读取的JSON字符串
                    sy = JsonUtility.FromJson<Datadata>(json);
                    Debug.Log("Loaded Data: " + sy.a); // 输出加载后的数据
                }
                catch (Exception e)
                {
                    Debug.LogError("Error loading JSON: " + e.Message); // 记录错误信息
                }
            }
            else
            {
                Debug.LogError("File does not exist: " + path2); // 文件不存在的错误信息
            }
        }
    
        // ... 省略其他代码 ...
    }
    

    请注意,这些修改只是示例,您可能需要根据实际情况调整代码。希望这些建议能帮助您解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月16日
  • 创建了问题 7月16日