c# 接收包含多个List的json串

本文介绍如何解析JSON串,并通过泛型封装的方法处理其中的数据,包括实体类的实例化与数据列表的获取。重点展示了如何将JSON数据转化为实际应用中的实体对象,以及如何使用泛型简化数据处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


json串如下:

[{"success":{"axlehead":[{"id":"32","axleName":"A\u578b","trainSerialID_id":"1"},{"id":"33","axleName":"C\u578b","trainSerialID_id":"1"},{"id":"34","axleName":"D\u578b","trainSerialID_id":"1"},{"id":"35","axleName":"E\u578b","trainSerialID_id":"1"},{"id":"36","axleName":"H\u578b","trainSerialID_id":"1"}],"trainserial":[{"id":"1","serialName":"b1"},{"id":"2","serialName":"b2"},{"id":"27","serialName":"CRh390"},{"id":"28","serialName":"CRh390"},{"id":"29","serialName":"CRh390"}]}}]
格式化的样式为:



json串中包含一个标识符 success,以及几个 list数据。


以下为处理的关键代码

  //以下代码中 ,  axlehead  及  trainserial 均为实体类
  
    private void  getJsonData(string jsonStr)
	{
		List<Dictionary<string, Dictionary<string, List<object>>>> deserialResult = (List<Dictionary<string, Dictionary<string, List<object>>>>)JsonConvert.DeserializeObject<List<Dictionary<string, Dictionary<string, List<object>>>>>(jsonStr);
		 if (deserialResult[0].Keys.First().Equals("success"))
		 { 
			 Dictionary<string, List<object>> dict_val = deserialResult[0]["success"];
			 List<axlehead> listAxlehead = getListByClassType<axlehead>(dict_val["axlehead"]);
			 List<trainserial> listTrainseriale = getListByClassType<trainserial>(dict_val["trainserial"]);  
		 } 
	   
	}

	private List<T> getListByClassType<T>(List<object> sourceList)  
	{
		List<T> listReturn = new List<T>();
		foreach (object obj in sourceList)
		{
			T tmp = JsonConvert.DeserializeObject<T>(obj.ToString());
			listReturn.Add(tmp);
		}
		return listReturn;
	}


使用泛型封装的一种写法:

	 private void  getJsonData(string jsonStr)
	{
	   List<Dictionary<string, Dictionary<string, List<object>>>> deserialResult = (List<Dictionary<string, Dictionary<string, List<object>>>>)JsonConvert.DeserializeObject<List<Dictionary<string, Dictionary<string, List<object>>>>>(jsonStr);
             if (deserialResult[0].Keys.First().Equals("success"))
             { 
                 Dictionary<string, List<object>> dict_val = deserialResult[0]["success"];
                 List<axlehead> listAxlehead = new List<axlehead>();
                 List<trainserial> listTrainseriale = new List<trainserial>();
                 getManyListByJson<axlehead, trainserial>(dict_val, "axlehead", out listAxlehead, "trainserial", out listTrainseriale);
                
             } 
           
        } 

        private void getManyListByJson<T1, T2>(Dictionary<string, List<object>> dict_DataSource, string tableName1, out List<T1> list1, string tableName2, out List<T2> list2)
        {
            list1 = getListByClassType<T1>(dict_DataSource[tableName1]);
            list2 = getListByClassType<T2>(dict_DataSource[tableName2]);
        }
        private List<T> getListByClassType<T>(List<object> sourceList)  
        {
            List<T> listReturn = new List<T>();
            foreach (object obj in sourceList)
            {
                T tmp = JsonConvert.DeserializeObject<T>(obj.ToString());
                listReturn.Add(tmp);
            }
            return listReturn;
        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值