首页 > 解决方案 > 将对象数组保存在 json 对象中

问题描述

所以我有两个 c# 类(Team 和 Player),我想将一个团队存储到一个 json 文件中。每支球队都有一些球员。我认为它应该是这样的:

{
    "name":"Chelsea"
    "players": [
        {
            "name":"Player1"
        },
        {
            "name":"Player2"
        },
        {
            "name":"Player3"
        }
    ]
}

但遗憾的是它对我不起作用。它总是只返回:

{"name":"Chelsea"}

我真的不知道为什么会这样。甚至有可能做到这一点吗?我的代码是:

public class Team
{
    public string name = "testTeam";
    public Player[] players = new Player[0];

    public void AddPlayer(Player player)
    {
        int i = players.Length;
        players = new Player[i+1];
        players[i] = player;
    }

    public void save()
    {
        File.WriteAllText(Application.dataPath + "/data/teams/" + name + ".json", JsonUtility.ToJson(this));
    }
}

public class Player
{
    public string name;
}

标签: c#jsonunity3d

解决方案


请参阅序列化规则

如何确保自定义类可以序列化

确保:

  • [Serializable]属性
  • 不抽象
  • 不是静态的
  • 不是泛型的,尽管它可能继承自泛型类

要确保自定义类或结构的字段被序列化,请参阅上面的如何确保脚本中的字段被序列化。

您应该添加属性[Serializable]

[Serializable]
public class Team
{
    ...
}

[Serializable]
public class Player
{
    ...
}

Unity 的内置 JsonUtility 可以很好地提示哪些内容将被正确序列化,因为它使用相同的序列化规则。

只是放在某个地方

public class Example : MonoBehaviour
{
    public Team team;
}

您将在 Unity 的 Inspector 中查看它是否正确序列化。


然后还可以查看Jawad对动态存储条目的优化方式的回答;)


推荐阅读