【问题标题】:Unity c# jsonUtility functions arent workingUnity c# jsonUtility 函数无法正常工作
【发布时间】:2020-03-12 10:14:49
【问题描述】:

想要将对象转换为 json 字符串并返回。

我的对象:

[Serializable]
public class Save
{
    public Levels PlayerLvl { get; set; }
    public int Kills { get; set; }
}

代码中的函数:

testfunction(Save savedata) {
    //(int)savedata.PlayerLvl equals 1
    //savedata.Kills equals 5
    string json = JsonUtility.ToJson(savedata);
    debug.log(json) // json equals "{}"
}

当我得到一个 json 字符串并想要将其转换回来时,也会发生同样的情况:

testFunction(string jsonstring) {
    //jsonstring is a valid json string that equals Save object
    Save savedata = JsonUtility.FromJson<Save>(jsonstring);
    // savedate equals a new Save object without content
}

这里有什么问题?


编辑:

我得到的Json:

{
    "Kills": 5,
    "PlayerLvl": 1
}

级别枚举:

public enum Levels {
    Level1 = 1,
    Level2 = 2
}

【问题讨论】:

  • 你能展示json的例子和Levels的类吗
  • afaik JsonUtility 不支持属性,要么使用字段,要么使用其他库,例如 Json.NET
  • 尝试为public enum Levels添加[Serializable]
  • 删除所有get;set;因为 JsonUtility 不支持属性。

标签: c# json unity3d


【解决方案1】:

见Manual: JSON Serialization

支持的类型

JSON 序列化程序 API 支持任何 MonoBehaviour 子类、ScriptableObject 子类或具有 [Serializable] 属性的普通类或结构。当您将对象传递给标准 Unity 序列化程序进行处理时,将应用与 Inspector 中相同的规则和限制:Unity 仅序列化字段;不支持Dictionary&lt;&gt; 等类型。

Unity 不支持将其他类型直接传递给 API,例如原始类型或数组。如果您需要转换它们,请将它们包装在某种类或结构中。

所以你想删除所有{get; set;} 以便使用字段而不是属性

[Serializable]
public class Save
{
    public Levels PlayerLvl;
    public int Kills;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多