【发布时间】:2014-07-05 02:12:04
【问题描述】:
我花了很多时间来解决我的问题。
在这个例子中,我在 SetNavRecords 数组中有 2 条记录。 第一个是 "Artikelnummer" : "21700",第二个是 "Artikelnummer" : "21701"
每条记录都有一个数组“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”中获取数据。我也需要根数据。
有人有想法吗?
谢谢!
【问题讨论】:
-
不要使用 .Values("OfflineVerkaufspreis"),因为那样你得到的只是 "OfflineVerkaufspreis" 对象。访问 Where 子句中的“OfflineVerkaufspreis”对象,例如
.Where(n => n["OfflineVerkaufspreis"]["Location_Code"] ...(我相信,我还没有测试过) -
那是因为你的代码告诉它当它显示
.Values("OffilineVerkaufspreis")时只获取OfflineVerkaufspreis的值。把它拿出来,然后对 tmpResult["SetNavRecords"] 做一个 where。未经测试,但这应该可以,只需弄清楚确切的语法即可。 -
关于我上面评论中建议的方法,好吧,这是错误的(请参阅,相信不能代替思考)。阅读下面老金的回答以获得简短的解释。