首页 > 解决方案 > 用 JObject 过滤 c# 对象

问题描述

让我先说我对 C# 开发非常陌生,所以如果解决方案看起来很明显,我深表歉意。

我从用户那里得到一个 JSON 字符串,我需要根据 JSON 字符串包含的内容过滤 C# 对象列表。JSON 只能包含我的 C# 模型具有的字段,但我不知道 JSON 字符串将包含哪些字段。我的 C# 模型看起来像这样:

public class Enrollment {
  public int Year { get; set; }
  public int NumEnrolls { get; set; }
  public int DaysIntoEnrollment { get; set; }
  public string Name { get; set; }
}

JSON 将具有这些属性中的一个或多个,以及要过滤掉的值。它可能看起来像这样:

{
    "Year": ["2020", "2019"],
    "Name": ["CourseA", "CourseB"],
    "DaysIntoEnrollment": "20"
}

我需要根据上面的 JSON 过滤我的 Enrollment 对象列表。因此,我希望最终结果包含所有不包含 2020 年或 2019 年的 Enrollment 对象。

我已经获得了一个过滤器,可以在单个属性上使用 linq,但是我的真实模型有更多可以过滤的属性,我正在寻找一个紧凑的解决方案,无论 JSON 中包含哪些属性,它都可以工作。这就是我的工作

public void GetFilteredData(string filters) {

  var enrollList = new List<Enrollments>();  // Pretend this contains a list of valid Enrollment data
  var json = JObject.Parse(filters);  // filters string is in the json format from above
  
  var propsToFilter = 
    from p in json["Year"]
    select p;
  
  var filtered = enrollList.Where(e => !propsToFilter.Contains(e.Year.ToString())));
}

有没有一种简单的方法可以做到这一点,而无需像我上面那样手动检查每个属性?

标签: c#asp.netjsonjson.net

解决方案


推荐阅读