簡體   English   中英

我需要在c#unity3d中為主類的子類元素創建對象嗎?

[英]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變量為nullplayer_detailsnull 您必須檢查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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM