玩转Json(1)——Json反序列化实体类


{
“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());
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值