所以我的问题是,当我试图访问json类的内容时,它返回一个空字符串值。首先,我试图创建一个对话系统。我试图将行和关于行的信息保存在一个json文件中的字符串中。(角色是一个篝火,这也是它被称为fireDialogue的原因)正如你在下面的json文件中看到的一行对话的对象由三个字符串组成,一个字符串实际包含该行,一个字符串包含该对话显示的速度,一个字符串包含字体颜色。(我希望能够使行的特定部分显示得更快并具有更多的可能性,所以我才加了|,所以我可以。稍后再拆分它)。我现在要发送相关代码,也许你们中的任何人都可以发现导致错误的原因:
json文件:
{
"dialogue": {
"fireDialogue": [
{
"content": "Hello there",
"letterDelay": "30",
"fontColour": ""
},
{
"content": "I talk |slow |and |fast",
"letterDelay": "30|50|30|10",
"fontColour": ""
}
],
}
json类:
[System.Serializable]
public class DialogueData
{
public Dialogue dialogue;
}
[System.Serializable]
public class Dialogue
{
public List<DialogueContent> fireDialogue;
}
[System.Serializable]
public class DialogueContent
{
public string content {get; set; }
public string letterDelay {get; set; }
public string fontColour {get; set; }
}
我尝试访问json的脚本:
public class CharacterInteraction : MonoBehaviour
{
public DialogueData dialogueData;
public TextAsset jsonFile;
void Start()
{
jsonFile = Resources.Load<TextAsset>("dialogue");
dialogueData = JsonUtility.FromJson<DialogueData>(jsonFile.text);
fireDialogueOrder = 0; // should access the first index of the list
//the following Debug.Log() returns an empty string for some reason
Debug.Log(dialogueData.dialogue.fireDialogue[fireDialogueOrder].content);
}
}
我已经检查了几个在线资源,并将我的json文件放入一个检查错误的网站,它没有发现任何错误。我还检查了json类是否正确,以及我在访问值的脚本中是否正确引用了它,但没有什么对我来说很明显。显然,我也进行了四次检查,如果文件名是正确的。而且Visual Studio Code和Unity都没有显示任何错误消息。结果就是错误的。
我问了比我更有编程经验的朋友,他们也没有任何想法,除了它必须与序列化有关。
我尝试删除json中包含三个字符串的对象,并直接将字符串值放入fireDialogue对象中,因此它将是字符串列表,而不是对象列表,这很好。问题似乎与我使用对象有关。
我希望我已经提供了足够的信息让你了解这个问题。我很感谢任何帮助!
1条答案
按热度按时间dwbf0jvd1#
由于您使用的是JsonUtility,因此必须从属性中删除get/set
但是我建议你找一个Unity的nuget包Newtonsoft.json并安装它。在这种情况下,你需要将get set添加到一些属性中;