Unity反序列化为Scriptable对象

时间:2017-03-20 12:51:36

标签: json unity3d serialization

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

ArgumentException: Cannot deserialize JSON to new instances of type 'CatalogueList.'
UnityEngine.JsonUtility.FromJson[CatalogueList]

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

这是代码。

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

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

CatalogueItemList代码

public class CatalogueList : ScriptableObject { 
    public List<CatalogueItem> itemList;
}

目录项代码

[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;
}

1 个答案:

答案 0 :(得分:5)

改为使用ToJsonOverwrite

  

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

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

所以对你来说

JsonUtility.FromJsonOverwrite(text, list);

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