You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何处理含NULL字段的JSON响应?

Unity中处理Session为null的JSON响应解决方案

首先明确核心问题:你的编译错误大概率是因为Session被定义为值类型(struct),值类型无法与null比较。而JSON中的null语义更适合用引用类型(class)来对应,以下是具体处理方案:

1. 修正类定义(推荐方案)

将Session改为引用类型(class),并确保所有用于反序列化的类都添加[System.Serializable]特性:

[System.Serializable]
public class Session
{
    public string token;
    public string name;
}

[System.Serializable]
public class ResponseData
{
    public Session session;
}

2. 正确判断Session是否为空

反序列化后直接通过== null判断即可,完全符合JSON中session: null的语义:

string jsonText = // 从服务器获取的JSON字符串
ResponseData responseData = JsonUtility.FromJson<ResponseData>(jsonText);

if (responseData.session == null)
{
    Debug.Log("Session is not available.");
}
else
{
    // 处理可用会话逻辑
    Debug.Log($"当前用户:{responseData.session.name},Token:{responseData.session.token}");
}

3. 若坚持使用值类型(struct)的处理方式

如果必须将Session定义为struct,由于值类型无法为null,需判断其是否为默认值:

[System.Serializable]
public struct Session
{
    public string token;
    public string name;
}

[System.Serializable]
public class ResponseData
{
    public Session session;
}

// 反序列化后判断默认值
ResponseData responseData = JsonUtility.FromJson<ResponseData>(jsonText);
if (responseData.session.Equals(default(Session)))
{
    Debug.Log("Session is not available.");
}
else
{
    // 处理可用会话逻辑
}

注意:此方案存在局限性——如果服务器返回的session是字段全为空的对象(如{"token":"", "name":""}),也会被判定为“不可用”,仅适用于服务器明确返回session: null的场景。

对你之前尝试方案的分析

  • 方案1、2编译报错:因为Session是值类型,值类型不允许与null进行比较,所以编译失败。
  • 方案3逻辑错误:你错误地将session与ResponseData的默认值比较,正确的做法应该是与Session的默认值(default(Session))比较。

内容的提问来源于stack exchange,提问作者MatterGoal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:18:26