{
“FId”: 8,
“FNumber”: “0”,
“FMaterialId”: 0,
“FCustomerId”: 0,
“FCustomerItemNo”: “2193”,
“FCustomerItemName”: “#1A Chrysler / Dodge 3-Button Remote Head Key (FCC: OHT692427AA)”,
“FModel”: “BRK-RH-CHR-01.3”,
“FCost”: 6.5500000000,
“FPrice”: 14.0000000000,
“FStockQty”: 119,
“FSalesHistory”: " 107/165/133 (405) ",
“FDaysRemaining”: 26,
“__RowNumber”: 1
}
如果是上面这种简单的Json字符串,我们可以直接用JSON的反序列化方法直接转为一个实体
var csObject = jsonSerialize.Deserializ(“接收JSon的变量”);
但我们如果是下面这种复杂的JSON
{
"data": {
"page_data": [{
"FId": 8,
"FNumber": "0",
"FMaterialId": 0,
"FCustomerId": 0,
"FCustomerItemNo": "2193",
"FCustomerItemName": "#1A Chrysler / Dodge 3-Button Remote Head Key (FCC: OHT692427AA)",
"FModel": "BRK-RH-CHR-01.3",
"FCost": 6.5500000000,
"FPrice": 14.0000000000,
"FStockQty": 119,
"FSalesHistory": " 107/165/133 (405) ",
"FDaysRemaining": 26,
"__RowNumber": 1
}, {
"FId": 17,
"FNumber": "0",
"FMaterialId": 0,
"FCustomerId": 0,
"FCustomerItemNo": "10276",
"FCustomerItemName": "5-PACK Ford H92 / H84 / 80-Bit (SA) Transp Key w/ OEM CHIP (BRK)",
"FModel": "BRK-H92-OEM-5PK",
"FCost": 20.0000000000,
"FPrice": 35.0000000000,
"FStockQty": 64,
"FSalesHistory": " 265/228/226 (719) ",
"FDaysRemaining": 8,
"__RowNumber": 10
}],
"rows_count": 767
},
"status": true,
"msg": ""
}
如上例,是一个Json格式的字符串,我们要获取每个实体类的FId
第一步,分析json,这是一整个字符串,我们可以用JSON.NET的方法将他转为一个JObject(Json对象)
var jObj = JObject.Parse(jsonStr);
第二步,JObject里面的每个属性都是一个Token(节点),比如“data”,“status”,“msg”,“data.page_data”(data节点下的子节点)都是一个节点,分析节点的数据类型,如上,“data.page_data”的数据类型是一个数组JArray,所以要获取节点的数据并强转为数组类型
var jArray =(JArray) jObj.SelectToken("data.page_data");
第三步,遍历数组,要获取数组下的FId,可知,FId也是数组下的一个节点,所以我们要获取FId这个节点,再获取他的值
foreach (var arr in jArray)
{
var jtoken = arr.SelectToken("FId");
int id = jtoken.Value<Int32>();
}
这样子就可以获取到我们想要的值了,另外一种方法是我们自己封装的动态对象类,用作我自己记录
var apiEdo = JsonConvert.DeserializeObject<ExtensionDynamicObject>(jsonStr, new GTL.Framework.Core.Orm.EdoJsonConverter());
var dataEdo = (ExtensionDynamicObject)apiEdo["data"];
var pageEdoc = (ExtensionDynamicObjectCollection) dataEdo["page_data"];
foreach (var edo in pageEdoc)
{
int fid = int.Parse( edo["FId"].ToString());
}