繁体   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