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)
使用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)
请注意,这不是一个不可变的方法,并会覆盖您的对象,但无论如何,这似乎是您的意图.