ASP.NET中实现JSON和对象及集合之间互转,附JsonHelper辅助操作类
来源:互联网 发布:成都网络外包公司 编辑:程序博客网 时间:2024/04/30 02:22
WebService只能返回字符串,所以我们选择了轻量级的JSON,为了简化操作,我们希望能在调用的地方能将JSON转化成相应的实体或IList集合,于是我们做了一个JsonHelper操作JSON和实体以及列表之间相互转换的辅助类。
调用WebService并将JSON转换
这里以实体User为例来做演示,WebService和调用的程序两边都要定义User类,并保持一致即可,其他调用也都一样调用,需要说明的是IPagedList这个是我自定义的类,详情可参考:ASP.NET通过扩展IPagedList接口 读取带有分页信息的集合
JSON辅助操作类(JSON和Object、JSON和IList、JSON和IPagedList之间相互转换)
using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization.Json;using System.Text.RegularExpressions;using System.IO; /// <summary>/// JSON操作辅助类/// </summary>public class JsonHelper{ /// <summary> /// 将JSON转化成IPagedList集合 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="json">JSON字符串</param> /// <returns>IPagedList集合</returns> public static IPagedList<T> JsonToPagedList<T>(string json) { if (json == "") return default(IPagedList<T>); //获取特定字段的索引,根据索引取到相应的值 int startPageIndex = json.IndexOf("\"PageIndex\":"); int startPageSize = json.IndexOf("\"PageSize\":"); int startTotalCount = json.IndexOf("\"TotalCount\":"); int startPageList = json.IndexOf("\"PageList\":"); int pageIndex = Convert.ToInt32(json.Substring(startPageIndex + 12, startPageSize - startPageIndex - 13)); int pageSize = Convert.ToInt32(json.Substring(startPageSize + 11, startTotalCount - startPageSize - 12)); int totalCount = Convert.ToInt32(json.Substring(startTotalCount + 13, startPageList - startTotalCount - 14)); //取出列表部分的JSON var newJson = json.Replace("}]}]", "}]"); newJson = newJson.Substring(startPageList + 11); var entitys = JsonToList<T>(newJson); return new PagedList<T>(entitys, pageIndex, pageSize, totalCount); } /// <summary> /// 将JSON转化成IList集合 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="json">JSON字符串</param> /// <returns>IList集合</returns> public static IList<T> JsonToList<T>(string json) { if (json == "") return default(IList<T>); var newJson = json.Replace("}]", ""); newJson = newJson.Substring(newJson.IndexOf("[{") + 2); var regex = new Regex("},{"); var jsons = regex.Split(newJson); var entitys = new List<T>(); foreach (var item in jsons) { var temp = "{" + item + "}"; entitys.Add(JsonToObject<T>(temp)); } return entitys; } /// <summary> /// 将JSON转化成Object单个实体 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="json">JSON字符串</param> /// <returns>Object实体</returns> public static T JsonToObject<T>(string json) { if (json == "") return default(T); var ser = new DataContractJsonSerializer(typeof(T)); var ms = new MemoryStream(Encoding.UTF8.GetBytes(json)); var jsonObject = (T)ser.ReadObject(ms); ms.Close(); return jsonObject; } /// <summary> /// 分页集合转化成JSON /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="pagedList">分页实体集合</param> /// <returns>JSON字符串</returns> public static string ObjectPagedListToJson<T>(IPagedList<T> pagedList) { if (pagedList == null || pagedList.Count == 0) return ""; var sb = new StringBuilder(); sb.Append("[{\"PageIndex\":"); sb.Append(pagedList.PageIndex); sb.Append(",\"PageSize\":"); sb.Append(pagedList.PageSize); sb.Append(",\"TotalCount\":"); sb.Append(pagedList.TotalCount); sb.Append(",\"PageList\":"); sb.Append(ObjectListToJson<T>(pagedList)); sb.Append("}]"); return sb.ToString(); } /// <summary> /// List集合转化成JSON /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="list">实体集合</param> /// <returns>JSON字符串</returns> public static string ObjectListToJson<T>(IList<T> list) { if (list == null || list.Count == 0) return ""; var sb = new StringBuilder(); sb.Append("["); for (var i = 0; i < list.Count; i++) { var item = list[i]; if (i > 0) { sb.Append(","); } sb.Append(ObjectToJson(item)); } sb.Append("]"); return sb.ToString(); } /// <summary> /// 对象转化成JSON /// </summary> /// <param name="obj">实体或实体集合</param> /// <returns>JSON字符串</returns> public static string ObjectToJson(object obj) { if (obj == null) return ""; var ser = new DataContractJsonSerializer(obj.GetType()); using (var ms = new MemoryStream()) { ser.WriteObject(ms, obj); var sb = new StringBuilder(); sb.Append(Encoding.UTF8.GetString(ms.ToArray())); return sb.ToString(); } }}
关于如何使用
WebService定义函数
[WebMethod]public string GetUserById(int id){ var user = _userService.GetById(id); return JsonHelper.ObjectToJson(user);}
调用WebService并将JSON转换
[WebMethod]WebServiceSoapClient webServiceClient = new WebServiceSoapClient();string jsonUser = webServiceClient.GetUserById(userId);var _user = JsonHelper.JsonToObject<User>(jsonUser);
这里以实体User为例来做演示,WebService和调用的程序两边都要定义User类,并保持一致即可,其他调用也都一样调用,需要说明的是IPagedList这个是我自定义的类,详情可参考:ASP.NET通过扩展IPagedList接口 读取带有分页信息的集合
0 0
- ASP.NET中实现JSON和对象及集合之间互转,附JsonHelper辅助操作类
- ASP.NET-JSONHelper操作
- ASP.NET:JSONHelper:json扩展类
- asp.net JSONHelper JSON帮助类
- ASP.NET之JSONHelper操作
- .NET中Redis安装部署及使用方法简介附->开源Redis操作辅助类
- JSonHelper.cs 用于ExtJS序列化对象 json.asp的Asp.Net版
- JSON辅助类,可以把一些对象和集合转化为标准的JSON格式
- asp.net 编写的 JSONHelper 类
- ASP.NET:JsonHelper类:ConvertDat…
- .net中json字符串和对象之间的转化方法
- JAVA中JSON和java对象之间的互转
- JSONHelper JSON帮助类
- ASP中遍历和操作Application对象的集合
- ASP中遍历和操作Application对象的集合
- 对象和JSON之间的转换?对象集合和字符串之间的转换?在JSP中使用JSNO?
- JsonHelper操作帮助类
- JsonHelper 操作帮助类
- gradle项目构建
- poj1338(啊这题我要死了)
- Effective C++——条款45(第7章)
- JQuery对元素的常用操作
- 用二进制去控制分享
- ASP.NET中实现JSON和对象及集合之间互转,附JsonHelper辅助操作类
- java学习笔记之异常
- MTK 平台基带原理
- 使用Ionic.Zip后文件夹过多的解决办法?
- 搭建网站常见返回码40X 50X等错误的原因及解决方案
- 01背包问题(回溯算法实现)
- android Notification 通知封装
- 【转载】迅为4412开发板实验LEDS驱动一
- Cocos2d-js cc.game项目启动