首页 > 解决方案 > 使用 lambda 表达式使用 c# 解析 Json 文件中数组的值

问题描述

我有这个 .Json 文件:

[
    {
        "targets":[
            "192.168.1.101:9182",
            "192.168.1.103:9100",
            "192.168.1.105:9182"  
        ]
    }
]

我想按值解析目标和它们。我已经做了一个解析 Json 文件并注销结果的函数: 类模型是:

public class targetResponse
    {
        public IList<string> targets { get; set; }
    }

在我的控制器中,我有这个功能可以注销所有值:

        [HttpGet]
        public async Task<IEnumerable<targetResponse>> Get()
        {
            IList<targetResponse> myList = new List<targetResponse>();
            var jsonString = System.IO.File
               .ReadAllText(@"D:\\Paths\\targets.json");
            myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);

            return myList;
        }

在此处输入图像描述

我要创建的功能是我只想从该 Json 文件中获取一个值,我尝试执行以下操作,但它不起作用:

    [HttpGet("{string}")]
    public async Task<dynamic> Get(string _string)
    {
        IList<targetResponse> myList = new List<targetResponse>();
        var jsonString = System.IO.File
           .ReadAllText(@"D:\\Paths\\targets.json");
        myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);
        return myList.FirstOrDefault().targets.Select(r=>r.ToString()==_string);
    }

在此处输入图像描述

如果有任何有关如何分享的教程,我还想创建一个更新/创建/删除方法(CRUD)谢谢

标签: c#jsonrestapiasp.net-core

解决方案


Linq在方法中有一个不正确的陈述Get。代替

myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);
return myList.FirstOrDefault().targets.Select(r=>r.ToString()==_string);

你可以写

myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);
return myList.FirstOrDefault().targets.FirstOrDefault(r => r == _string);

使用WhereorFirstOrDefault代替Select,否则你会得到一个布尔值列表。也不需要使用ToString(),因为targets已经是字符串列表


推荐阅读