【问题标题】:Reading Data from a deserialized Json Array从反序列化的 Json 数组中读取数据
【发布时间】:2017-05-12 13:26:03
【问题描述】:

我目前正在设计一个以 Json 形式接收数据的机器人,在将其反序列化为数组后,我尝试搜索信息,这就是问题所在。

用于反序列化的ProjectInfo类

namespace InfoClass
{
    public class ProjectInfo
    {
        public int Id { get; set; }
        public string companyName { get; set; }
        public string projectName { get; set; }
        public string clientName { get; set; }
        public string status { get; set; }
        public int sprintPhase { get; set; }
    }
}

我的主要 Json 阅读器类

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace InfoClass
{
    public class TestInfo
    {

        string json;
        public TestInfo()
        {

            if (json == null)
                InitializeJson();
        }

        private void InitializeJson()
        {
            json = @"{'CompanyData':[{id : 1 , companyName : 'Company1', projectName : 'TestProject1', clientName : 'TestClient1', sprintPhase : 2, status : 'Ongoing'},
                    {id : 2 , companyName : 'Company2', projectName : 'TestProject2', clientName : 'TestClient2', sprintPhase : 1 , status : 'Waiting on Designs'},
                    {id : 3 , companyName : 'Company3', projectName : 'TestProject3', clientName : 'TestClient3', sprintPhase : 5, status : 'Live'}]}";
        }


        public string GetStatus()
        {
            string status = "";
            ProjectInfo[] jsonArray = JsonConvert.DeserializeObject<ProjectInfo[]>(json);
            foreach (var companies in jsonArray)
            {
                foreach (var company in companies.projectName)
                {
                    if (company.Equals("TestProject3"))
                    {
                        status = "found";
                    }
                    else
                    {
                        status = "not found";
                    }
                }

            }
            return status;
        }
    }
}

我的应用程序的最终目标是让用户输入项目名称/公司名称,然后能够查看诸如 sprintPhase、状态和任何其他项目相关信息之类的内容。

【问题讨论】:

    标签: c# json json.net deserialization


    【解决方案1】:

    您可以使用Linq(添加using System.Linq;)过滤jsonArray

    var userFilter = jsonArray.FirstOrDefault(x => x.company == "UserInputCompanyName" || x.projectName == "UserCompanyName");
    if(userFilter != null)
    {
      // show stuff to user of userFilter
    }
    

    【讨论】:

    • 为迟到的回复道歉,这确实有效,但我的最终目标是进行更动态的搜索,所以在找到 TestCompany3 后,我想搜索与以下相关的 projectName、clientsName 等测试公司3。这可以使用 Linq 完成,还是有其他方法可以做到这一点?
    • 您可以这样做 - 只需创建一个新的 linq 表达式并应用您的过滤器
    • 我不太确定你的结果应该是什么样子。
    • 类似,Testcompany3 找到(你的代码是这样的)然后我想提取 TestCompany3 的状态。所以我正在寻找的输出是 TestCompany3, Status = Live.
    • 你可以这样做,例如myLabel.Text = userFilter.Status;
    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 2017-09-06
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多