gpt4 book ai didi

json - Unity 反序列化为可编写脚本的对象

转载 作者:行者123 更新时间:2023-12-02 20:57:09 33 4
gpt4 key购买 nike

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

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

我的目录列表位于我的 Assets 中,我可以完美地序列化并上传到我的服务器,我正在尝试下载我的文件并使用 json 填充所有字段。

这是代码。

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

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

目录项列表代码

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

最佳答案

改用FromJsonOverwrite!

Note that the JSON Serializer API supports MonoBehaviour and ScriptableObject subclasses as well as plain structs/classes. However, when deserializing JSON into subclasses of MonoBehaviour or ScriptableObject, you must use FromJsonOverwrite; FromJson is not supported and will throw an exception.

https://docs.unity3d.com/2022.3/Documentation/ScriptReference/JsonUtility.FromJsonOverwrite.html

所以对你来说就是

JsonUtility.FromJsonOverwrite(text, list);

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

关于json - Unity 反序列化为可编写脚本的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42904122/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com