从 JSON 对象中过滤特定值

问题描述 投票:0回答:1

我从 API 获取 JSON 响应

"table1": [
    {
        "abc": "test",
        "def": "test1"
    },
    {
        "abc": "test2",
        "def": "User1"
    }       
]

绑定到

public List<object>? table1 { get; set; }

我想使用 Linq/Lamda 获取 User1。 以下返回0条记录

    var filteredList = table1
.Where(item => item.GetType().GetProperty("def",BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase)?.GetValue(item)?.ToString() is "User1" or "User2")
.ToList();

有什么问题吗

c# linq lambda
1个回答
0
投票

我不明白你为什么在这里尝试使用 System.Reflection 和模式匹配

is

借助 JSON 库(例如 Newtonsoft.Json)来读取/解析对象的字段:

using Newtonsoft.Json.Linq;

var filteredList = table1
    .Where(item => (new string[] {"User1", "User2"}).Contains(JObject.FromObject(item)?.SelectToken("def").ToString()))
    .ToList();

或者,如果您知道

Table
对象的结构,则可以定义并使用模型类而不是
object
类型:

public class Root
{
    //public List<object>? table1 { get; set; }
    public List<Table>? table1 { get; set; }
}

public class Table
{
    public string Abc { get; set; }
    public string Def { get; set; }
}
var filteredList = table1
    .Where(item => (new string[] {"User1", "User2"}).Contains(item.Def))
    .ToList();
© www.soinside.com 2019 - 2024. All rights reserved.