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;
}
Unity LoadFromJson sy沒反應怎麽辦
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
阿里嘎多学长 2024-07-16 10:43关注以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
根据您提供的代码和问题列表,以下是一些建议和步骤,以帮助您解决Unity中使用JsonUtility从JSON加载数据时没有反应的问题:
-
确保JsonUtility的使用正确:
- 检查json字符串是否与Datadata类的结构匹配。可以使用在线的JSON格式化工具来验证JSON格式。
- 确保Datadata类中的所有属性都是public的,因为JsonUtility只能序列化public字段。
-
验证文件路径和读写操作:
- 确保
Application.persistentDataPath返回的路径是正确的,并且您的应用程序有权限读写该路径下的文件。 - 使用
File.Exists(path)来检查文件是否存在,这有助于调试文件路径问题。
- 确保
-
检查Datadata类的结构:
- 您的Datadata类缺少
[System.Serializable]属性。添加此属性以确保类可以被JsonUtility序列化和反序列化。
- 您的Datadata类缺少
-
检查变量初始化:
- 在调用Load方法之前,确保sy变量已经被初始化。可以在
Start或Awake方法中进行初始化。
- 在调用Load方法之前,确保sy变量已经被初始化。可以在
-
调试和日志记录:
- 在Load方法中添加更多的
Debug.Log语句,输出关键变量的值和程序的状态信息,例如在读取文件前后打印文件内容。
- 在Load方法中添加更多的
-
处理异常和错误:
- 使用try-catch块来捕获可能发生的异常,并使用
Debug.LogError来记录错误信息,这有助于识别问题所在。
- 使用try-catch块来捕获可能发生的异常,并使用
-
测试不同的数据和场景:
- 在不同的数据集和不同的运行场景下测试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); // 文件不存在的错误信息 } } // ... 省略其他代码 ... }请注意,这些修改只是示例,您可能需要根据实际情况调整代码。希望这些建议能帮助您解决问题。
解决 无用评论 打赏 举报 编辑记录-