簡體   English   中英

嘗試將列表保存為 json 文件並將其加載到 C#(unity)

[英]Trying to save a list as json file and load it in C#(unity)

public class Mycustom_gameobject_list
{
    public WayspotAnchorPayload game_object_coordinates;
    public GameObject storing_gameobject;
   
}
[Serializable]
public class Gameobject_lsit : MonoBehaviour
{
    public List<Mycustom_gameobject_list> Store_gameobjects_list = new List<Mycustom_gameobject_list>();
}

我使用自定義 class 創建一個列表並在其中存儲一些數據然后嘗試將列表傳遞給創建的方法

 public static void SaveLocalPayloads(List<Mycustom_gameobject_list> gamelist)
        {
            List<Mycustom_gameobject_list> gameobjdata = new List<Mycustom_gameobject_list>();
            foreach (var Gamelist in gamelist)
            {
               gameobjdata.Add(Gamelist);
             
            }
         
            var json = JsonUtility.ToJson(gameobjdata);
           PlayerPrefs.SetString(GameobjData, json);
           
            //Debug.Log("Data Center length "+ gameobjdata.Count);
            Debug.Log("what's inside the file "+json);
            //var wayspotAnchorsData = new WayspotAnchorsData();
            //Debug.Log("DataCenter game obj" + gameobj.Length);
            //wayspotAnchorsData.Payloads = wayspotAnchorPayloads.Select(a => a.Serialize()).ToArray();
            //wayspotAnchorsData.gameobj = gameobj.ToArray();
            //Debug.Log("DataCenter Pay load length " + wayspotAnchorsData.Payloads.Length);
            //Debug.Log("DataCenter gameobj length " + wayspotAnchorsData.gameobj.Length);

            //string wayspotAnchorsJson = JsonUtility.ToJson(wayspotAnchorsData);
            //string obj = JsonUtility.ToJson(gameobj);
            //PlayerPrefs.SetString(DataKey, wayspotAnchorsJson);
            //PlayerPrefs.SetString(gamobj, obj);

        }

然后我調試列表的長度以確保數據正在加載,然后我將其保存為 json。

public static List<Mycustom_gameobject_list> LoadLocalPayloads()
        {
        if (PlayerPrefs.HasKey(GameobjData))
        {
            var json = PlayerPrefs.GetString(GameobjData);
            List<Mycustom_gameobject_list> gameobjectlist = JsonUtility.FromJson<List<Mycustom_gameobject_list>>(json);
            Debug.Log("Loading Data " + gameobjectlist);
            Debug.Log("The length of the loading data "+ gameobjectlist.Count);
            //var payloads = new List<WayspotAnchorPayload>();
            //var json = PlayerPrefs.GetString(DataKey);
            //var wayspotAnchorsData = JsonUtility.FromJson<WayspotAnchorsData>(json);
            //foreach (var wayspotAnchorPayload in wayspotAnchorsData.Payloads)
            //{
            //var payload = WayspotAnchorPayload.Deserialize(wayspotAnchorPayload);
            //payloads.Add(payload);
            //}
           // List<Mycustom_gameobject_list> load_gameobject_list = new List<Mycustom_gameobject_list>();
           
            /*foreach (var gameobject in gameobjectlist)
            {
                load_gameobject_list.Add(gameobject);
            }*/
            // var gameobjdata = JsonUtility.FromJson<Mycustom_gameobject_list>(json);
            //foreach (var gameobjects in gameobjdata.)
            
            

                return gameobjectlist;
        }
        else
        {
            return null;
        }
       However, when I debug the length of the data that is about to be loaded, it returns 0.

不確定是什么問題,我是否必須在存儲數據的腳本中創建自定義 class? 謝謝

If I get it correctly, you mean deserialize an C# object to json and serialized to JSON to C# object? 在這種情況下,我會使用Newtonsoft.Json

這是一個包含 20 個FooClass對象的通用列表:

var barList = new List<FooClass>();
for (var i = 0; i < 20; i++)
{
    barList.Add(new FooClass { Index = i, Name = $"Name{i}" });
}

class FooClass
{
    public int Index { get; set; }

    public string Name { get; set; }
}

要序列化列表(使其成為 JSON 字符串):

var jsonStr = JsonConvert.SerializeObject(barList);

您可以將jsonStr的值寫入文件,或者在任何可以再次獲取它的位置以獲取與jsonStr完全相同的值。

您可以將 JSON 字符串反序列化為 object (將字符串轉換為對象)

var jsonStrRead = File.ReadAllText("/foobar.json");
var deserializedBarList = JsonConvert.DeserializeObject<List<FooClass>>(jsonStrRead);

jsonStrRead是保存文件的內容,deserializedBarList 是deserializedBarList化的產物。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM