当前位置: 首页 > 编程语言 > C#

使用LINQ查询JSON分享

时间:2023-04-11 02:01:03 C#

使用LINQ查询JSON我从API调用收到了Json响应。它有几层嵌套,像这样(这是一个片段):,"StartDate":"2012-04-03T00:00:00+01:00","EndDate":null,"Status":{"Name":"Active","Value":5},"Client":{"Id":"35ea10da-b8d5-4ef8-bf23-c829ae90fe60","Name":"clientName","AdditionalItems":{}},"ServiceAgreement":{"Id":"65216699-a409-44b0-8294-0e995eb05d9d","Name":"Name","AdditionalItems":{"ScheduleBased":true,"PayFrequency":{"Id":"981acb72-8291-de11-98fa-005056c00008","Name":"Weekly","AdditionalItems":{}},"PayCycle":[{"Name":"ScheduleBased","ScheduleBased":true,"SelfBilling":false,"Id":"a8a2ecc4-ff79-46da-a135-743b57808ec3","CreatedOn":"2011-09-16T23:32:19+01:00","CreatedBy":"SystemAdministrator","ModifiedOn":"2011-09-16T23:32:19+01:00","ModifiedBy":"SystemAdministrator","Archived":false}]}},}]...我想做的是使用Linq从PayCycle节点检索数据。我可以使用Result.ServiceAgreement.AdditionalItems.ScheduledBased在控制器中使用以下Linq获取值为true的项目:varresult=frompindata["Data"]["Items"].Children()where(bool)p["结果"]["ServiceAgreement"]["AdditionalItems"]["ScheduleBased"]==trueselectnew{Name=(string)p["Result"]["Client"]["Name"],Id=(string)p["结果"]["客户端"]["Id"]};现在我需要获取Result.ServiceAgreement.AdditionalItems.Paycycle.ScheduleBased和SelfBilling属性。如果PayCycle也是一个数组,我该怎么做,我如何像上面在Linq中使用Data.Items那样获取子项,以便我可以在两个项目上使用where子句过滤器?您可以将JSON反序列化为动态对象,然后对该对象使用Linq:[TestMethod]publicvoidTestMethod1(){conststringjson=@"""Items"":[{""Result"":{""Id"":""191e24b8-887d-e111-96ec-000c29128cee"",""Name"":""Name",""StartDate"":""2012-04-03T00:00:00+01:00"",""EndDate"":null,""Status"":{""Name"":""Active"",""Value"":5},""Client"":{""Id"":""35ea10da-b8d5-4ef8-bf23-c829ae90fe60"",""Name"":""clientName",""AdditionalItems"":{}},""ServiceAgreement"":{""Id"“:”“65216699-a409-44b0-8294-0e995eb05d9d”,“”名称“”:“”名称“,”“AdditionalItems”“:{“”ScheduleBased“”:真,“”PayFrequency“”:{""Id"":""981acb72-8291-de11-98fa-005056c00008"",""Name"":""Weekly",""AdditionalItems"":{}},""PayCycle"":[{""Name"":""ScheduleBased"",""ScheduleBased"":true,""SelfBilling"":false,""Id"":""a8a2ecc4-ff79-46da-a135-743b57808ec3",""创建于"":""2011-09-16T23:32:19+01:00"",""CreatedBy"":""SystemAdministrator"",""ModifiedOn"":""2011-09-16T23:32:19+01:00"",""ModifiedBy"":""SystemAdministrator"",""Archived"":false}]}}}}]";动态数据=System.Web.Helpers.Json.Decode("{"+json+"}");varresult=fromiin(IEnumerable)data.Items其中i.Result.ServiceAgreement.AdditionalItems.ScheduleBased==trueselectnew{i.Result.Client.Name,i.Result.Client.Id};Assert.AreEqual(1,result.Count());Assert.AreEqual("客户端名称",result.First().Name);Assert.AreEqual("35ea10da-b8d5-4ef8-bf23-c829ae90fe60",result.First().Id);}请注意,我必须在示例json字符串周围添加方括号{和},否则.NETjson解析器不喜欢它首先,我不熟悉以这种格式编写["some"]["thing"]LINQ/LAMBDA。我的第一步是创建一些类/对象来保存稍后要创建的任何代码的数据。例如publicclassResult{publicGuidId{get;放;}公共字符串名称{得到;放;},publicDateTimeStartDate{get;放;}//你明白了}但也许试试下面的方法?以上就是C#学习教程:使用LINQ查询所有JSON分享的内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—varresult=frompindata["Data"]["Items"].Children()where(bool)p["Result"]["ServiceAgreement"]["AdditionalItems"]["ScheduleBased"]==true&&(p["Result"]["ServiceAgreement"]["AdditionalItems"]["PayCycle"])。Where(o=>o.["ScheduleBased"]==true)选择新的{Name=(string)p["Result"]["Client"]["Name"],Id=(string)p["Result"]["客户端"]["Id"]};本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: