有谁知道为什么下面这段代码会返回错误
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;
}
答案 0 :(得分:5)
改为使用ToJsonOverwrite
!
请注意,JSON Serializer API支持MonoBehaviour和ScriptableObject子类以及普通结构/类。但是,在将JSON反序列化为MonoBehaviour或ScriptableObject的子类时,必须使用FromJsonOverwrite;不支持FromJson,并会抛出异常。
https://docs.unity3d.com/Manual/JSONSerialization.html
所以对你来说
JsonUtility.FromJsonOverwrite(text, list);
请注意,这不是一个不可变的方法,会覆盖你的对象,但无论如何这似乎都是你的意图。