我正在尝试读取string from json文件并将其传递给我在Unity中的UI文本,我面临的问题是该字符串始终为null,我不知道为什么,现在我找到了JSON文件路径并读取它,但当我尝试访问该字符串时它是null。我不知道怎么读json。我真的不明白这一切是如何运作的。我是JSON格式的新手,我正在尝试练习它。这是我的第一个方法。我正在使用Unity Engine,我正在使用Streaming Assets
读取json文件从Json Script中读取数据:
using UnityEngine;
using System.IO;
public class ReadFromJson : MonoBehaviour {
private string _filePath = "myText.json";
Data dh;
string str;
void Start()
{
LoadGameData();
}
public Data getCurrentRoundData()
{
return dh;
}
private void LoadGameData()
{
string filePath = Path.Combine(Application.streamingAssetsPath, _filePath);
if (File.Exists(filePath))
{
string dataAsJSON = File.ReadAllText(filePath);
DataHolder loadedData = JsonUtility.FromJson<DataHolder>(dataAsJSON);
dh = loadedData.data;
str = loadedData.data.TextToPass;
Debug.Log("My Text is" + dh.TextToPass);
Debug.Log("Path Exist");
}
else
{
Debug.LogError("CANNOT LOAD GAME DATA!!");
}
}
}
将json数据应用于我的UI文本的管理器
DataController = FindObjectOfType<ReadFromJson>();
_data = DataController.getCurrentRoundData();
myText.text = _data.TextToPass;
DataHolder.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class DataHolder {
public Data data;
}
Json Text
{"DataHolder":
{
"TextToPass":"I'm A Horse"
}
}
Data.cs
[System.Serializable]
public class Data {
public string TextToPass ;
}
我得到的是TextToPass为空
答案 0 :(得分:1)
模型有Data
,JSON有DataHolder
。 JSON库并没有假设&#34;哦,有一个属性,他们必须意味着&#34; - 它按名称命名,名称不匹配。
更改类型或更改JSON。他们需要匹配。作为说明,一种形式:
public class Foo {
public int Bar {get;set;}
}
匹配表单的JSON:
{ "Bar": 123 }
答案 1 :(得分:0)
我不确定,但这可能会解决您的问题。将模型更改为:
数据模型:
[System.Serializable]
public class Data {
public DataHolder dataHolder;
}
您的DataHolder模型:
[System.Serializable]
public class DataHolder {
public string TextToPass;
}
希望它有所帮助!
答案 2 :(得分:0)
{"DataHolder":
{
"TextToPass":"I'm A Horse"
}
}
这是你的json数据,它应该转换为C#:
[Serializable]
public class DataHolder
{
public string TextToPass;
}
[Serializable]
public class RootObject
{
public DataHolder DataHolder;
}
然后你使用:
if (File.Exists(filePath))
{
string dataAsJSON = File.ReadAllText(filePath);
RootObject rootObject = JsonUtility.FromJson<RootObject>(dataAsJSON);
if(rootObject == null){ Debug.LogError("Json failed"); }
DataHolder dt = rootObject.dataHolder;
if(dt == null){ Debug.LogError("Missing object"); }
Debug.Log("My Text is" + dt.TextToPass);
Debug.Log("Path Exist");
}
问题是您的json文件没有映射到C#文件,并且序列化程序在映射中没有匹配。