Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在c#(Unity)中解析JSON文件_Javascript_C#_Json_Unity3d - Fatal编程技术网

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

Javascript 在c#(Unity)中解析JSON文件,javascript,c#,json,unity3d,Javascript,C#,Json,Unity3d,我正在尝试将我从JS应用程序创建的JSON文件解析为Unity,使用C# 我没有Json或读取数据的经验,所以我肯定我缺少一些基本的东西 以下是JS中数据结构的外观: function DialIn () { this.id = null; this.line = "default in line"; this.links = []; } function DialOut () { this.id = null; this.line = "defa

我正在尝试将我从JS应用程序创建的JSON文件解析为Unity,使用C#

我没有Json或读取数据的经验,所以我肯定我缺少一些基本的东西

以下是JS中数据结构的外观:

function DialIn () {
    this.id = null; this.line = "default in line"; this.links = [];
}

function DialOut () {
    this.id = null; this.line = "defauLt out line"; this.links = []; this.autoDelete = false;
}

function DialNode () {
    this.id = null; this.posX = null; this.posY = null; this.ins = []; this.outs = [];
}
            
var NodesDB = []; //DataBase of dial nodes
简而言之,NodesDB是一个DialNode数组,每个DialNode包含一个In数组和一个out数组

一旦存储在JSON中,它看起来像这样(例如,NodeDB中有3个节点)

然后,在Unity中,我创建了这个结构,试图模仿JS中的结构:

    [System.Serializable]
    class DialIn
    {
        string id; string line; string[] links;
    }


    [System.Serializable]
    class DialOut
    {
        string id; string line; string[] links; bool autoDelete;
    }


    [System.Serializable]
    class DialNode
    {
        string id; int posX, posY; DialIn[] ins; DialOut[] outs;
    }

    DialNode[] NodesDB;
从这里开始,我使用以下命令:

path = Application.dataPath + "/Jsons/Bloup.json";
jsonData = File.ReadAllText(path);
我相信我应该用这样的东西:
NodesDB=JsonUtility.FromJson(jsonData)

但显然,事情并没有那么简单


任何帮助都将不胜感激:o

将对象的所有成员变量
公开
。JSONUtility不会(反)序列化私有成员变量。

或者,如果您确实希望您的成员变量是私有的,请将
[SerializeField]
属性添加到您希望序列化的每个字段。

您可以将它们添加到项目中,并在顶部脚本中使用, 我使用这个脚本进行解析和其他

 var N = JSON.Parse(the_JSON_string);
 var versionString = N[0]["id"].Value;  
 var versionString = N[0]["posX"].Value;  

和其他……

我已经公开了我所有的类和节点数据库,但仍有一些地方出了问题。这是我想要放置数据的地方:
public DialNode[]NodesDBNodesDB=JsonUtility.FromJson(nodesData)时我得到一个错误“无法隐式地将类型DialNode转换为DialNode[]”我不知道如何处理数组,但我甚至不确定我是否正确使用FromJson语法。我可以使用
NodesDB=JsonUtility.FromJson(nodesData)来解决这个错误但是,我得到:“ArgumentException:JSON必须表示对象类型。”我想您需要另一个类来包装节点数组,JSON不应该以数组作为根开始,而是应该如下所示:
{“NodeDB”:[{…},{…},等等]}
。那有用吗?有用!我一直在读Unity的解析器不支持json文件根的数组。我想一旦数据被提取出来,我就可以摆脱这个“容器”,然后我们就开始了=)我已经创建了一个更简单的脚本版本,没有数组数组和所有噪音。在这种情况下,FromJson工作得很好。我认为问题在于我的Json不包含类,而是包含所述类的数组。不过,我还没有找到解决办法。我正在调查:
 var N = JSON.Parse(the_JSON_string);
 var versionString = N[0]["id"].Value;  
 var versionString = N[0]["posX"].Value;