如何使用 Unity 解析 Json 文件

Posted

技术标签:

【中文标题】如何使用 Unity 解析 Json 文件【英文标题】:How to parse Json files using Unity [duplicate] 【发布时间】:2021-07-17 14:29:56 【问题描述】:

仍然在这个问题上,我知道这是一篇旧帖子,但我也在努力让 C# 解析 JSON。

我正在使用 Unity 2018.2.8f1 和 VS 2019(我也尝试过 VS 2017)。

这是我的 Json 文件(一个非常简单的文件):


  "glossary": 
    "title": "example glossary"
  

这是我的 C#:

using System;
using System.IO;
using UnityEngine;

[Serializable]
public class GlossaryRoot

    public Glossary Glossary  get; set; 



[Serializable]
public class Glossary

    public string title  get; set; 



public class Data_Manager : MonoBehaviour

    private void Start()
    
    
        string filePath = Path.Combine(Application.streamingAssetsPath, "Example.json");
        string dataAsJSON = File.ReadAllText(filePath);

        var myData = JsonUtility.FromJson<GlossaryRoot>(dataAsJSON);

        string myTitle = myData.Glossary.title;

        Debug.Log(myTitle);
    

我收到错误: “NullReferenceException:对象引用未设置为对象的实例”

关于如何解决这个问题的任何想法?我一直在寻找解决方案,并尝试了很多东西,但仍然没有成功。

我知道有多个与此类似的问题,例如: C#, Unity3D, JSON Parsing: Failing to parse JSON into C# object

但我仍然无法让它工作。 即使我删除了“获取和设置”,我也会在控制台中得到“Null”。

感谢任何帮助。

谢谢!

【问题讨论】:

【参考方案1】:

    你的名字不匹配应该是public Glossary glossary

    afaik Unity 的序列化器(因此还有内置的 JsonUtility)不支持(反)序列化属性,而是使用字段

所以这应该可以工作

    [Serializable]
    public class GlossaryRoot
    
        public Glossary glossary;
    


    [Serializable]
    public class Glossary
    
        public string title;
    

【讨论】:

以上是关于如何使用 Unity 解析 Json 文件的主要内容,如果未能解决你的问题,请参考以下文章

通过 C# 在 Unity 中从 API URL 解析 JSON

在 c# (Unity) 中解析 JSON 文件

C# unity (发布到安卓端中使用)解析json字符串—使用微软官方的包Newtonsoft.Json

C# unity (发布到安卓端中使用)解析json字符串—使用微软官方的包Newtonsoft.Json

C# unity (发布到安卓端中使用)解析json字符串—使用微软官方的包Newtonsoft.Json

如何在统一 C# 中解析来自 JSON 的数据? [复制]