[英]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.