【问题标题】:Item not added to list with classes? [closed]项目未添加到类列表中? [关闭]
【发布时间】:2021-08-14 13:55:01
【问题描述】:

我有这两个类:

public class SpawnStringClass{
    public List<PlayerSpawn> playerSpawn;
}

public class PlayerSpawn
{
    public string PlayerName;
    public float posx;
    public float posz;
}

我创建了一个引用第一类的变量:

SpawnStringClass SpawnClass = new SpawnStringClass(){playerSpawn = new List<PlayerSpawn>()};
                var item = new PlayerSpawn
                {
                    PlayerName = player.NickName.ToString(),
                    posx = SpawnX,
                    posz = SpawnZ
                };


                SpawnClass.playerSpawn.Add(item);

现在,当我尝试将带有列表的 Spawn 字符串类转换为 json 时,它不起作用。



SpawnString = JsonUtility.ToJson(SpawnClass);
Debug.Log(SpawnString);

有人知道为什么吗?

这些类在主要的单声道行为类之外,并且声明了变量 player.nickname、SpawnX 和 SpawnZ。

提前致谢!

【问题讨论】:

  • 请提供minimal reproducible example。您当前的问题并未证明您正在谈论的问题。
  • 这就是我所能提供的,为什么不能重现?有类的类声明,并在类中添加一个列表元素。
  • 如何重现? I've tried
  • 您的代码看起来正确。请提供您尝试验证行为的方法。您的验证似乎是错误的,因此无法用您给定的示例重现。
  • docs say: " 你传入的对象必须由序列化程序支持:它必须是 MonoBehaviour、ScriptableObject 或应用了 Serializable 属性的普通类/结构。您要包含的字段类型必须由序列化程序支持;不支持的字段将被忽略,私有字段、静态字段和应用了 NonSerialized 属性的字段也会被忽略。” 我不熟悉这个但也许尝试添加[Serializable] 属性?

标签: c# unity3d


【解决方案1】:

内置的 JsonUtility 使用同样内置的 Unity 序列化器。

请参阅Script Serialization,尤其是如何确保自定义类可以序列化部分,您可以在其中找到

确保:

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

解决方案:你的两个类都必须归属于[Serializable]

[Serializable]
public class SpawnStringClass
{
    public List<PlayerSpawn> playerSpawn;
}

[Serializable]
public class PlayerSpawn
{
    public string PlayerName;
    public float posx;
    public float posz;
}

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2021-05-29
    相关资源
    最近更新 更多