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

C# Xamarin中如何从嵌套数组的JSON中获取元素?附实体类

在Xamarin C#中解析嵌套JSON并获取指定元素的方法

针对你给出的OrderInfoResult和Menu实体类,在Xamarin环境里处理这份嵌套结构的JSON其实很简单,我给你梳理下具体步骤:

首先,先把JSON字符串反序列化成你定义的实体类对象——这里因为你用了Newtonsoft.Json的特性([JsonObject]和[JsonProperty]),直接用JsonConvert处理就好:

// 假设responseContent是你从接口拿到的JSON字符串
var orderInfo = JsonConvert.DeserializeObject<OrderInfoResult>(responseContent);

接下来,因为Menu是嵌套结构(Items字段又是一个List<Menu>),要找到指定元素的话,最方便的方式是写一个递归方法遍历整个菜单树。比如下面这个根据Id查找的方法:

private Menu FindMenuById(List<Menu> menuList, string targetId)
{
    foreach (var menu in menuList)
    {
        // 先检查当前菜单是否匹配目标Id
        if (menu.Id.Equals(targetId, StringComparison.OrdinalIgnoreCase))
        {
            return menu;
        }
        
        // 如果当前菜单有子项,递归遍历子菜单
        if (menu.Items != null && menu.Items.Any())
        {
            var foundSubItem = FindMenuById(menu.Items, targetId);
            if (foundSubItem != null)
            {
                return foundSubItem;
            }
        }
    }
    // 没找到返回null
    return null;
}

调用的时候就这么用:

// 比如要找Id为"drink_001"的菜单元素
var targetMenu = FindMenuById(orderInfo.Menu, "drink_001");

if (targetMenu != null)
{
    // 成功找到,就可以访问它的属性了
    Debug.WriteLine($"找到菜单:{targetMenu.Name},图标地址:{targetMenu.IconUrl}");
}
else
{
    Debug.WriteLine("没找到指定的菜单元素");
}

如果需要根据Name或者其他属性查找,只需要修改方法里的判断条件就行,逻辑是完全一致的。

另外给你提几个小注意点:

  • 别忘了在你的Xamarin项目里安装Newtonsoft.Json NuGet包,不然JsonConvert这些类用不了;
  • 处理嵌套的时候一定要判断menu.Items是否为null,避免空引用异常;
  • 如果要找所有符合条件的元素(不是只找第一个),可以把方法返回类型改成List<Menu>,遍历的时候把匹配项添加到列表里就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:59:52