木子宜居

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

JSON序列化和反序列化的实例

之前有项目中使用到了Json的序列化和反序列化,现在将使用的实例记录下来以备查阅。如有不妥,请指教。

代码的最终目的是得到一个符合 resultClass<List<rtnGetFindMyCar>> 要求的JSON字符串

1
JsonHelper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class JsonHelper
    {
        /// <summary>
        /// JSON序列化
        /// </summary>
        public static string JsonSerializer<T>(T t)
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream();
            ser.WriteObject(ms, t);
            string jsonString = Encoding.UTF8.GetString(ms.ToArray());
            ms.Close();
            return jsonString;
        }
 
        /// <summary>
        /// JSON反序列化
        /// </summary>
        public static T JsonDeserialize<T>(string jsonString)
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
            T obj = (T)ser.ReadObject(ms);
            return obj;
        }
}

  泛型类 resultClass<T> 

1
2
3
4
5
6
7
8
public class resultClass<T>
 {
     public bool isSuccess;
     public int errorCode;
     public string errorMsg;
     public string timeStamp= DateTime.Now.ToString();
     public T data;
 }

     主体数据类,项目中此类被作为集合加入到List<rtnGetFindMyCar>   

1
2
3
4
5
6
7
8
9
10
public class rtnGetFindMyCar
{
    public string carNum = "";//车牌号码
    public string parkingTimeRange = "";//停车时间段
    public string parkingName = "";//停车场名称
    public string zoneName = "";//停车场区域名称
    public string dotNO = "";//停车场车位编号
    public string mapPath = "";//地图路径
    public string realtimeCapture = "";//实时抓拍
}

以下是函数的部分主要代码(其中调用合作厂家的WebService函数时需要车牌信息,所以有涉及车牌的部分代码) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
resultClass<List<rtnGetFindMyCar>> rAPPdata = new resultClass<List<rtnGetFindMyCar>>();  //由于项目需要将用户三个车辆的查询信息一次性返回,因此resultClass<T>中的T是关于车辆信息的的一个集合List<rtnGetFindMyCar>
List<rtnGetFindMyCar> listCar = new List<rtnGetFindMyCar>();  //实例化该集合
//...  此处省去查询用户3个车牌号码的数据库查询代码,返回值是DataSet类型的ds
DataRow rowCar = ds.Tables[0].Rows[0];//项目数据库已约定结果数据只有一行
for (int i = 0; i < rowCar.ItemArray.Length; i++)  //循环调用车牌
{
  if (rowCar[i].ToString().Length > 0)//确保车牌不为空
  {
     //...此处省去调用合作厂家的WebService接口内容,返回内容是符合resultClass<rtnGetFindMyCar>格式的JSON字符串
     resultClass<rtnGetFindMyCar> dataCls = new resultClass<rtnGetFindMyCar>();  //实例化结果类resultClass<rtnGetFindMyCar>,用于接收单个车牌查询出的结果
     dataCls = JsonHelper.JsonDeserialize<resultClass<rtnGetFindMyCar>>(datatemp);  //返回的JSON内容整体反序列化,将JSON字符串转换为JSON对象
 
     rtnGetFindMyCar rtnget = new rtnGetFindMyCar();
     if (dataCls.isSuccess == true//判断返回内容是否成功标志位,项目有约定,true表示返回数据可信,false数据不可信
     {
        string x = JsonHelper.JsonSerializer<rtnGetFindMyCar>(dataCls.data);  //序列化,将dataCls对象的data转换为字符串,data部分其实就是项目需要数据的rtnGetFindMyCar类对象格式
        rtnget = JsonHelper.JsonDeserialize<rtnGetFindMyCar>(x);//反序列化,将data字符串转换成rtnGetFindMyCar类的对象格式
     }
     listCar.Add(rtnget);  //将已转换为rtnGetFindMyCar类对象的rtnget添加到List<rtnGetFindMyCar>中
  }
}
 
//整理最终返回值
rAPPdata.isSuccess = true;
rAPPdata.errorMsg = errcodeEnum.返回值正常.ToString();
rAPPdata.errorCode = (int)errcodeEnum.返回值正常;
rAPPdata.timeStamp = DateTime.Now.ToString();
rAPPdata.data = listCar;//关键,返回值的data部分是个List集合
backData = JsonHelper.JsonSerializer<resultClass<List<rtnGetFindMyCar>>>(rAPPdata);  //最后再将含有集合的结果类对象转换成JSON字符串,以供后续代码使用

 

  

 

posted on   木子宜居  阅读(323)  评论(0编辑  收藏  举报

编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
点击右上角即可分享
微信分享提示