使用JsonUtility将Json文件转换为List。[unity] [c#]

时间:2017-08-01 05:28:04

标签: c# unity3d unityscript

我正在尝试使用Json.Utilities将GameInfo.json文件转换为List数组。我想操纵这个List数据 我的项目包括5个组成部分(日期,锦标赛名称,pos,轮次,总分) 这是我的Json文件(GameInfo.json)

{"Items":
    [
        {
        "date":"11/06/16",
        "tournamentName":"Shriners Hospitals for Children Open",
        "pos":"2",
        "rounds":"62 67 70 67 --",
        "totalScore":"288"  
        },

        {
        "date":"11/06/16",
        "tournamentName":"Shriners Hospitals for Children Open",
        "pos":"2",
        "rounds":"62 67 70 67 --",
        "totalScore":"288"  
        }       
]
}

游戏信息类包括5个数据,GameInfolist类将用于制作列表结构。 GameInfo.json文件转换为GameInfo。 之后,游戏信息存储为字符串类型(jsonstring) 通过使用unity.utilities,我尝试将我的字符串数据存储到List中,以便操纵我的数据。 但是,我无法访问foreach循环。(我无法看到Debug.Log消息)。 你能帮我解决我的问题吗?感谢您阅读

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class GameInfoList
{
    public GameInfo gameInfo;
    public string[,] Items = new string[2,5];
    public List<GameInfo> list = new List<GameInfo>();
}

[System.Serializable]
public class GameInfo
{
    public string date;
    public string tournamentName;
    public string pos;
    public string rounds;
    public string totalScore;
}

public class JsonDataConverter : MonoBehaviour
{
    public string path = "GameInfo.json";
    public string jsonstring;
    GameInfoList gameInfoList;
    public string JsonFileToString(string path)
    {
        Debug.Log("test");
        string loadJsonfile = path.Replace(".json", "");
        TextAsset loadedfile = Resources.Load<TextAsset>(loadJsonfile);
        jsonstring = loadedfile.text;
        Debug.Log("jsonstring:" + jsonstring);
        return jsonstring;
    }

    public void Awake()
    {
        Debug.Log("testawake");
        jsonstring = JsonFileToString(path);
        gameInfoList = JsonUtility.FromJson<GameInfoList>(jsonstring);
    }

    public void Start()
    {
        foreach (var object in gameInfoList.list)
        {
            Debug.Log("reach to Inside Loop");
            Debug.Log(object .date);
            Debug.Log(object .pos);
            Debug.Log(object .rounds);
            Debug.Log(object .totalScore);
        }
    } 
}

1 个答案:

答案 0 :(得分:2)

'参数超出范围'意味着'gameInfoList'等于null,我认为问题出在这一行。

gameInfoList = JsonUtility.FromJson<GameInfoList>(jsonstring);

我认为json字符串只能转换为对象GameInfoList,如下所示:

[System.Serializable]
public class GameInfoList
{
    public List<GameInfo> Items;
}