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

Unity中C#反序列化JSON嵌套数组并获取属性方法

解决方案与代码优化建议

一、实现card.image_url的简洁访问

要直接通过card.image_url获取嵌套图片链接,只需在Card类中新增一个只读计算属性,自动从card_images数组中提取第一个元素的image_url,同时做空值避免异常:

public class Card
{
    public int id { get; set; }
    public string name { get; set; }
    public string desc{ get; set; }
    public CardImage[] card_images { get; set; }

    // 新增只读属性,直接返回第一张卡图的链接
    public string image_url
    {
        get
        {
            // 空值检查:避免数组为空/Null时抛出异常
            if (card_images == null || card_images.Length == 0)
                return string.Empty;
            return card_images[0].image_url;
        }
    }
}

修改后即可在Start方法中直接调用:

foreach(Card card in cards.data)
{
    Debug.Log(card.name);
    Debug.Log(card.desc);
    Debug.Log(card.image_url); // 现在可以直接访问图片链接
}

二、OOP与代码规范建议(针对新手)

1. 遵循C#命名规范

C#行业标准使用**帕斯卡命名法(PascalCase)**给类、属性命名,提升代码可读性,修改后的类示例:

public class Root
{
    public Card[] Data { get; set; }
}

public class Card
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Desc { get; set; }
    public CardImage[] CardImages { get; set; }

    public string ImageUrl
    {
        get
        {
            if (CardImages == null || CardImages.Length == 0)
                return string.Empty;
            return CardImages[0].ImageUrl;
        }
    }
}

public class CardImage
{
    public int Id { get; set; }
    public string ImageUrl { get; set; }
    public string ImageUrlSmall { get; set; }
}

注:如果使用Unity自带的JsonUtility反序列化,需通过[JsonProperty("原JSON键名")]特性映射命名,例如[JsonProperty("card_images")] public CardImage[] CardImages { get; set; }

2. 强制空值安全检查

永远不要假设API返回的数组/对象一定非空,比如card_images可能为空数组或Null,直接访问card_images[0]会抛出空引用异常,必须提前判断。

3. 优先使用Unity自带工具

Unity自带的JsonUtility足够处理大部分JSON场景,无需自定义JsonHelper,使用示例:

string jsonString = File.ReadAllText("myTxtJson.txt");
Root root = JsonUtility.FromJson<Root>(jsonString);
foreach(Card card in root.Data)
{
    // 逻辑代码
}

4. 强化封装思想

通过计算属性暴露图片链接,而非让外部直接访问card_images数组。后续如果API返回的图片结构变化(比如从数组改为单个对象),只需修改Card类的ImageUrl属性实现,外部代码无需改动,符合开闭原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:39:25