Unity C#:如何将类的数组转换为JSON [英] Unity C#: how to convert an Array of a class into JSON

查看:194
本文介绍了Unity C#:如何将类的数组转换为JSON的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要保存多个玩家的数据.我通过制作PlayersInfo类的数组并尝试将该数组转换为JSON来实现.这是我的代码

I need to save multiple player's data. I am doing it by making an array of PlayersInfo class and trying to convert the array into JSON. here is my code

  PlayerInfo[] allPlayersArray = new PlayerInfo[1];

  allPlayersArray[0] = new PlayerInfo();
  allPlayersArray[0].playerName = "name 0";

  string allPlayersArrayJson = JsonUtility.ToJson(allPlayersArray);
  print(allPlayersArrayJson);
  PlayerPrefs.SetString("allPlayersArrayJson", allPlayersArrayJson);

  string newJson = PlayerPrefs.GetString("allPlayersArrayJson");
  print(newJson);

  PlayerInfo[] newArray = new PlayerInfo[1];

  newArray = JsonUtility.FromJson<PlayerInfo[]>(newJson);

  print(newArray[0].playerName);

前两个打印语句返回"{}",而第三个给出空引用错误. TIA

First two print statements returns "{}" and 3rd one gives null reference error. TIA

推荐答案

就像我在评论中说的那样,没有直接的支持.需要 Helper 类.这是我做出此答案的唯一原因是因为即使阅读了我提供的链接后,您仍然遇到问题.

Like I said in my comment, there is no direct support. Helper class is needed. This is only reason I am making this answer is because you are still having problems even after reading the link I provided.

创建一个名为JsonHelper的新脚本.复制并粘贴下面的代码.

Create a new script called JsonHelper. Copy and paste the code below inside it.

using UnityEngine;
using System.Collections;
using System;

public class JsonHelper
{

    public static T[] FromJson<T>(string json)
    {
        Wrapper<T> wrapper = UnityEngine.JsonUtility.FromJson<Wrapper<T>>(json);
        return wrapper.Items;
    }

    public static string ToJson<T>(T[] array)
    {
        Wrapper<T> wrapper = new Wrapper<T>();
        wrapper.Items = array;
        return UnityEngine.JsonUtility.ToJson(wrapper);
    }

    [Serializable]
    private class Wrapper<T>
    {
        public T[] Items;
    }
}

您问题中的代码现在应该可以运行了.您要做的就是将所有JsonUtility单词替换为JsonHelper.我在下面为您做到了:

The code in your question should now work. All you have to do is to replace all JsonUtility words with JsonHelper. I did that for you below:

void Start()
{
    PlayerInfo[] allPlayersArray = new PlayerInfo[1];

    allPlayersArray[0] = new PlayerInfo();
    allPlayersArray[0].playerName = "name 0";

    string allPlayersArrayJson = JsonHelper.ToJson(allPlayersArray);
    print(allPlayersArrayJson);
    PlayerPrefs.SetString("allPlayersArrayJson", allPlayersArrayJson);

    string newJson = PlayerPrefs.GetString("allPlayersArrayJson");
    print(newJson);

    PlayerInfo[] newArray = new PlayerInfo[1];

    newArray = JsonHelper.FromJson<PlayerInfo>(newJson);

    print(newArray[0].playerName);
}

这篇关于Unity C#:如何将类的数组转换为JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆