如何在C#中过滤JSON数组

我花了很多时间为我的问题找到解决方案。

在此示例中,我在SetNavRecords数组中有2条记录。第一个是 ,第二个是

每个记录都有一个数组“ OfflineVerkaufspreis”。

对我来说重要的是“ OfflineVerkaufspreis”中的“ Location_Code”字段。我只需要一个已过滤位置代码的孔信息。

如何为一个位置代码选择数据,例如“ MH”?

我正在使用C#和Newtonsoft类进行JSON解析。

我已经用LINQ尝试了一些版本,但没有成功。

{ "SetNavRecords" : [ { "Artikelbeschreibung" : "Trikot \"Home\" 2012/2013",

"Artikelbeschreibung2" : "weiß",

"Artikelnummer" : "21700",

"Artikelrabattgruppe" : "MERCH",

"Gutschein" : false,

"MwStProduktgruppe" : "VOLLNEU",

"OfflineVerkaufspreis" : [ { "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

}

]

},

{ "Artikelbeschreibung" : "Autogrammtrikot 2012/2013",

"Artikelbeschreibung2" : "weiß",

"Artikelnummer" : "21701",

"Artikelrabattgruppe" : "MERCH",

"Gutschein" : false,

"MwStProduktgruppe" : "VOLLNEU",

"OfflineVerkaufspreis" : [ { "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",

"Unit_Price" : 69.99

},

{ "Allow_Line_Discount" : false,

"Date" : "2014-05-16T00:00:00",

"Item_No" : "21701",

"Location_Code" : "RY",

"Unit_Price" : 69.99

}

]

}

] }

这是我的问题:

var tmpResult = JObject.Parse(File.ReadAllText(FileName));

var resultObject = tmpResult["SetNavRecords"]

.Values("OfflineVerkaufspreis")

.Values<JObject>()

.Where(n => n["Location_Code"].Value<string>() == "MH");

过滤器工作正常,但tmpResult中的数据不完整。我只在“ OfflineVerkaufspreis”中获得数据。我也需要根数据。

有人知道吗?

谢谢!

回答:

这感觉像是一项工作,通过将json序列化为对象,可以使工作变得容易一些。要将json反序列化为对象,可以使用:

RootObject obj = JsonConvert.DeserializeObject<RootObject>(jsonString);

同样,您可以使用以下方法将对象转换回json:

string jsonString = JsonConvert.SerializeObject(RootObject);

基于问题中提供的json的对象结构如下:

public class OfflineVerkaufsprei

{

public bool Allow_Line_Discount { get; set; }

public string Date { get; set; }

public string Item_No { get; set; }

public string Location_Code { get; set; }

public double Unit_Price { get; set; }

}

public class SetNavRecord

{

public string Artikelbeschreibung { get; set; }

public string Artikelbeschreibung2 { get; set; }

public string Artikelnummer { get; set; }

public string Artikelrabattgruppe { get; set; }

public bool Gutschein { get; set; }

public string MwStProduktgruppe { get; set; }

public List<OfflineVerkaufsprei> OfflineVerkaufspreis { get; set; }

}

public class RootObject

{

public List<SetNavRecord> SetNavRecords { get; set; }

}

然后,您可以通过说出以下内容轻松地遍历对象:

for each(SetNavRecord i in obj.SetNavRecords)

{

// do something to the record

}

以上是 如何在C#中过滤JSON数组 的全部内容, 来源链接: utcz.com/qa/426986.html

回到顶部