[英]Do I need to create object for subclass elements of a main class in c# unity3d?
如果有人問這個問題,我感到很抱歉,因為我錯過了一些難以置信的基本知識。
我有一堂課:
[Serializable]
public class ResponseObject
{
public string id;
public List<PlayerDetails> player_details ;
}
[Serializable]
public class PlayerDetails
{
public int name;
public int image ;
}
並且在其他腳本中有以下代碼(
private ResponseObject resObject = new ResponseObject();
resObject = JsonUtility.FromJson<ResponseObject>(m_apiCallResponse);
現在,當我嘗試訪問PlayerDetials類中的變量時,如下所示,
Debug.Log(resObject.player_details[0].name);
錯誤:
Object reference not set an instance of an object
在調試行Object reference not set an instance of an object
而且我在通過API調用獲得的列表的第0個索引處有數據,但仍然收到上述錯誤。
但是如果我將object聲明為
private ResponseObject resObject = new ResponseObject();
resObject .player_details = new List<PlayerDetails>();
resObject = JsonUtility.FromJson<ResponseObject>(m_apiCallResponse);
我是否缺少某些東西,我是否需要以上述方式強制聲明?
我是否需要在聲明的每個類上放置[Serializable]
才能使JsonUtility
正常工作,因為如果我錯過了每個類的Serializable,它將無法正常工作?
現在,當我嘗試如下訪問PlayerDetials類中的變量時,我得到了Null異常...
那是因為resObject
變量為null
或player_details
為null
。 您必須檢查resObject
是否為null,然后在訪問它之前檢查player_details
的Length是否> 0
。 由於這是一個List
,因此您必須使用player_details.Count
來執行此檢查。
當JsonUtility.FromJson
無法反序列化json時,這些變量可以為null,因為您的json不匹配該類,或者當json甚至不匹配您問題中的類。 當您缺少[Serializable]
時,它也可以為null
。
您可以通過在此處擺放json來確定您的json是否與您的類匹配。 請先執行此操作,然后再在此答案下發表評論。
我是否缺少某些東西,我是否需要以上述方式強制聲明?
不行 您不需要現在就這樣做。 由於要將字符串/ json轉換為對象,因此絕對不需要在調用JsonUtility.FromJson
之前初始化變量。
這可以:
private ResponseObject resObject;
void yourFunction()
{
resObject = JsonUtility.FromJson<ResponseObject>(m_apiCallResponse);
}
要么
void yourFunction()
{
ResponseObject resObject = JsonUtility.FromJson<ResponseObject>(m_apiCallResponse);
}
現在,如果您使用的是JsonUtility.ToJson
,則必須初始化傳遞給該函數的變量,因為您正在將該變量對象轉換為string / json。
我是否需要在我聲明的每個類上都放置[Serializable]才能使JsonUtility工作
是的 。 您需要使用JsonUtility
每個類進行序列化/反序列化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.