Unity反序列化为Scriptable对象

Joh*_*ont 2 serialization json unity-game-engine

有谁知道为什么下面这段代码会返回错误

ArgumentException: Cannot deserialize JSON to new instances of type 'CatalogueList.'
UnityEngine.JsonUtility.FromJson[CatalogueList]
Run Code Online (Sandbox Code Playgroud)

我的目录列表存在于我的资产中,我可以完整地序列化并上传到我的服务器,我试图下载我的文件并用json填写所有字段.

这是代码.

void AddDownloadedItems(string text, CatalogueList list)
{
    CatalogueList inventoryItemList = UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/CatalogueItem.asset", typeof(CatalogueList)) as CatalogueList;
    list = JsonUtility.FromJson<CatalogueList>(text);
}
Run Code Online (Sandbox Code Playgroud)

但正如我所说它只会返回错误?

CatalogueItemList代码

public class CatalogueList : ScriptableObject { 
    public List<CatalogueItem> itemList;
}
Run Code Online (Sandbox Code Playgroud)

目录项目代码

[System.Serializable]                                                           //  Our Representation of an InventoryItem
public class CatalogueItem
{
    public string databaseID;
    public string itemName = "New Item";
    public enum PrizeMachine { Bronze, Silver, Gold, Platinum };
    public PrizeMachine myMachine;                     
    public Texture2D itemThumb = null;
    public Texture2D itemIcon = null;
    public string itemThumbName;
    public string itemIconName;
    public string shortDescripion;
    public string fullDescription;                                 
    public int priceInBronze;
    public int priceInSilver;
    public int priceInGold;
    public int priceInPlatinum;
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*hön 5

使用ToJsonOverwrite,而不是!

请注意,JSON Serializer API支持MonoBehaviour和ScriptableObject子类以及普通结构/类.但是,在将JSON反序列化为MonoBehaviour或ScriptableObject的子类时,必须使用FromJsonOverwrite; 不支持FromJson,并将抛出异常.

https://docs.unity3d.com/Manual/JSONSerialization.html

所以对你来说就是这样

JsonUtility.FromJsonOverwrite(text, list);
Run Code Online (Sandbox Code Playgroud)

请注意,这不是一个不可变的方法,并会覆盖您的对象,但无论如何,这似乎是您的意图.