Unity:无法从JSON文件中读取字符串

时间:2017-04-03 07:16:53

标签: c# json unity3d

我正在尝试读取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为空

3 个答案:

答案 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#文件,并且序列化程序在映射中没有匹配。