如何在C# UWP中通过LINQ根据分类ID从列表查询JSON数据
解决UWP中分类课程匹配与JSON查询问题
嘿,我来帮你搞定这个需求!咱们分步骤来拆解,从JSON转对象、页面传参到LINQ筛选,一步步来:
第一步:定义实体类并反序列化JSON
首先得把JSON字符串转换成C#强类型对象,这样后续的查询和操作才方便。先创建对应分类和课程的实体类:
// 分类实体类 public class Category { public int CatId { get; set; } public string Name { get; set; } public string Desc { get; set; } public string Img { get; set; } } // 课程实体类 // 注意:你的课程JSON里cat_id是字符串,分类里是数字,建议统一类型(这里改成int更合理,JSON里的'2'会自动转换) public class Course { public int Id { get; set; } public int CatId { get; set; } // 如果要保留字符串类型,就改成string public string Name { get; set; } public DateTime Date { get; set; } public string Img { get; set; } }
然后用UWP推荐的System.Text.Json(或Newtonsoft.Json)把JSON反序列化为对象列表:
注意:你的原始JSON里每个对象最后有多余的逗号(比如
'img': 'Assets/sawirada/html-flat.png', }),一定要去掉,否则反序列化会报错!
// 处理分类JSON string categoriesJson = @"[ { 'cat_id' : 1, 'name': 'HTML', 'desc': 'WebDesign', 'img': 'Assets/sawirada/html-flat.png' }]"; var categoriesList = JsonSerializer.Deserialize<List<Category>>(categoriesJson, new JsonSerializerOptions { PropertyNameCaseInsensitive = true // 忽略属性大小写,匹配JSON里的cat_id和类里的CatId }); // 处理课程JSON string coursesJson = @"[ { 'id' : 1, 'cat_id' : '2', 'name': 'Learn HTML', 'date': '2017-10-19', 'img': 'Assets/sawirada/phpmysql.jpg' }]"; var coursesList = JsonSerializer.Deserialize<List<Course>>(coursesJson, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
第二步:传递分类ID到课程页面
在分类页面,当用户点击某个分类时,把对应的cat_id通过导航传递到课程页面:
// 假设selectedCategory是用户选中的分类对象 Frame.Navigate(typeof(CoursesPage), selectedCategory.CatId);
然后在课程页面的OnNavigatedTo方法里接收这个参数:
protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); // 接收传递过来的分类ID if (e.Parameter is int passedCatId) { // 调用筛选方法 FilterCoursesByCategory(passedCatId); } }
第三步:用LINQ筛选匹配分类ID的课程
这一步就是核心的查询操作,用LINQ从课程列表里筛选出分类ID匹配的课程:
private void FilterCoursesByCategory(int categoryId) { // 筛选CatId与传入ID匹配的课程 var matchedCourses = coursesList.Where(course => course.CatId == categoryId).ToList(); // 把筛选结果绑定到UI控件(比如ListView) CoursesListView.ItemsSource = matchedCourses; }
关于UWP中从列表查询JSON数据的说明
你问的“从列表查询JSON数据”,本质是先把JSON反序列化为强类型对象列表,再对这个列表使用LINQ进行查询(筛选、排序、分组等)。直接操作JSON字符串非常繁琐,转换成对象列表后,LINQ的各种方法都能轻松用上,就像上面的Where筛选一样。
内容的提问来源于stack exchange,提问作者Abdifatah Abdilahi
相关产品推荐
相关产品推荐

