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
相关产品推荐
相关产品推荐

