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

如何在C#中过滤JSON数组Share

时间:2023-04-10 22:44:30 C#

如何在C#中过滤JSON数组在此示例中,我在SetNavRecords数组中有2条记录。第一个是“Artikelnummer”:“21700”,第二个是“Artikelnummer”:“21701”每条记录都有一个数组“OfflineVerkaufspreis”。对我来说重要的是“OfflineVerkaufspreis”中的“Location_Code”字段我只需要过滤位置代码的孔信息。如何选择位置代码的数据,例如“MH”?我正在使用C#和Newtonsoft类进行JSON解析。我用LINQ尝试了一些版本但没有成功。{"SetNavRecords":[{"商品描述":"Jersey"Home"2012/2013","商品描述2":"白色","商品编号":"21700","商品折扣组":"MERCH",“优惠券”:false,“VATProductGroup”:“全新”,“OfflineSalePrice”:[{“Allow_Line_Discount”:true,“Date”:“2014-05-16T00:00:00”,“Item_No”:“21700","Location_Code":"BP","Unit_Price":5.0},{"Allow_Line_Discount":true,"Date":"2014-05-16T00:00:00","Item_No":"21700","Location_Code":"MH","Unit_Price":5.0},{"Allow_Line_Discount":true,"Date":"2014-05-16T00:00:00","Item_No":"21700","Location_Code":"RY","Unit_Price":5.0}]},{"商品描述":"Autographjersey2012/2013","商品描述2":"白色","商品编号":"21701","商品折扣组":"MERCH","Coupon":false,"VATproductgroup":"BRANDNEW","OfflineSalePrice":[{"Allow_Line_Discount":false,"Date":"2014-05-16T00:00:00","Item_No”:“21701”,"Location_Code":"BP","Unit_Price":69.99},{"Allow_Line_Discount":false,"Date":"2014-05-16T00:00:00","Item_No":"21701","Location_Code":“MH”,“单价”:69.99},{“Allow_Line_Discount”:假,“日期”:“2014-05-16T00:00:00”,“Item_No”:“21701”,“Location_Code”:“RY”,"Unit_Price":69.99}]}]}这是我的问题:vartmpResult=JObject.Parse(File.ReadAllText(FileName));varresultObject=tmpResult["SetNavRecords"].Values("OfflineVerkaufspreis").Values().Where(n=>n["Location_Code"].Value()=="MH");过滤器工作正常,但tmpResult中的数据不完整我只获得“OfflineVerkaufspreis”中的数据。我还需要根数据。有人有想法吗?谢谢!这感觉就像是一项可以通过切换到json以进行对象序列化而变得更容易的工作。将json反序列化为可用对象:RootObjectobj=JsonConvert.DeserializeObject(jsonString);同样,您可以使用以下方法将对象转回json:stringjsonString=JsonConvert.SerializeObject(RootObject);题中提供的json对象结构是这样的:publicclassOfflineVerkaufsprei{publicboolAllow_Line_Discount{get;放;}公共字符串日期{得到;放;}publicstringItem_No{get;放;}publicstringLocation_Code{得到;放;}publicdoubleUnit_Price{得到;放;}}publicclassSetNavRecord{publicstringArtikelbeschreibung{get;放;}publicstringArtikelbeschreibung2{get;放;}publicstringArtikelnummer{get;;}publicboolGutschein{get;放;}publicstringMwStProduktgruppe{get;放;}publicListOfflineVerkaufspreis{get;放;}}publicclassRootObject{publicListSetNavRecords{get;轻松迭代对象的方法:foreach(SetNavRecordiinobj.SetNavRecords){//对记录做一些事情}vartmpResult=JObject.Parse(File.ReadAllText(FileName));varresultObject=tmpResult["SetNavRecords"].Values("OfflineVerkaufspreis").Values().Where(n=>n["Location_Code"].Value()=="MH");此代码将导航到OfflineVerkaufspreis.Values,然后过滤它们,但(我猜)您想要选择与您的Where子句匹配的位置,然后还选择父详细信息。您可以使用“选择”来选择您真正感兴趣的所有信息。varresultObject=tmpResult["SetNavRecords"].Values("OfflineVerkaufspreis").Values().Where(n=>n["Location_Code"].Value()=="MH").Select(n=>new{Location=n,Context=n.Parent}).ToArray();当然,您可以只选择您真正需要的信息,而不是整个父级。为了使这段代码更具可读性,我建议创建一些与JSON输入相匹配的类,以便将JSON映射到这个对象图。这将使您的Linq更易于编写、阅读和理解。更新:建议在评论中使用:.Where(n=>n["OfflineVerkaufspreis"]["Location_Code"]...这种方法的问题在于,最后您不知道哪个OfflineVerkaufspreis实际上与您的where子句匹配...我会创建名称为SetNavRecords和OfflineVerkaufspreis类。然后我将使用命名空间System.Web.Script.Serialization.JavaScriptSerializer中的JavaScriptSerializer对其进行反序列化。代码是这样的——JavaScriptSerializer.Deserialize(String,Type);然后我可以像操作一个简单的通用集合一样操作它,例如。列表。希望这对你有帮助。以上就是C#学习教程:C#中如何过滤所有JSON数组共享的内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: