将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。 此类不能继承。

//  msdn 例子:

  1. namespace SL_DataContractJsonSerializer
  2. {
  3. public partial class Page : UserControl
  4. {
  5. public Page()
  6. {
  7. InitializeComponent();
  8. }
  9. //This uses an event handler, not SL data binding
  10. void OnClick(object sender, EventArgs args)
  11. {
  12. txtOutput1.Text = "Create a User object and serialize it.";
  13. string json = WriteFromObject();
  14. txtOutput2.Text = json.ToString(); // Displays: {"Age":42,"Name":"Bob"}
  15. txtOutput3.Text = "Deserialize the data to a User object.";
  16. string jsonString = "{'Name':'Bill', 'Age':53}";
  17. User deserializedUser = ReadToObject(jsonString);
  18. txtOutput4.Text = deserializedUser.Name; // Displays: Bill
  19. txtOutput5.Text = deserializedUser.Age.ToString(); // Displays: 53
  20. }
  21. // Create a User object and serialize it to a JSON stream.
  22. public static string WriteFromObject()
  23. {
  24. //Create User object.
  25. User user = new User("Bob", 42);
  26. //Create a stream to serialize the object to.
  27. MemoryStream ms = new MemoryStream();
  28. // Serializer the User object to the stream.
  29. DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
  30. ser.WriteObject(ms, user);
  31. byte[] json = ms.ToArray();
  32. ms.Close();
  33. return Encoding.UTF8.GetString(json, 0, json.Length);
  34. }
  35. // Deserialize a JSON stream to a User object.
  36. public static User ReadToObject(string json)
  37. {
  38. User deserializedUser = new User();
  39. MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
  40. DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
  41. deserializedUser = ser.ReadObject(ms) as User;
  42. ms.Close();
  43. return deserializedUser;
  44. }
  45. }
  46. [DataContract]
  47. public class User
  48. {
  49. [DataMember]
  50. public string Name { get; set; }
  51. [DataMember]
  52. public int Age { get; set; }
  53. public User() { }
  54. public User(string newName, int newAge)
  55. {
  56. Name = newName;
  57. Age = newAge;
  58. }
  59. }
  60. }

可以抽象成如下类:

  1. public class JsonHelper
  2. {
  3. /// <summary>
  4. /// 生成Json格式
  5. /// </summary>
  6. /// <typeparam name="T"></typeparam>
  7. /// <param name="obj"></param>
  8. /// <returns></returns>
  9. public static string GetJson<T>(T obj)
  10. {
  11. DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
  12. using (MemoryStream stream = new MemoryStream())
  13. {
  14. json.WriteObject(stream, obj);
  15. string szJson = Encoding.UTF8.GetString(stream.ToArray());
  16. return szJson;
  17. }
  18. }
  19. /// <summary>
  20. /// 获取Json的Model
  21. /// </summary>
  22. /// <typeparam name="T"></typeparam>
  23. /// <param name="szJson"></param>
  24. /// <returns></returns>
  25. public static T ParseFromJson<T>(string szJson)
  26. {
  27. T obj = Activator.CreateInstance<T>();
  28. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
  29. {
  30. DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
  31. return (T)serializer.ReadObject(ms);
  32. }
  33. }
  34. }
  1. /// <summary>
  2. /// 反回JSON数据到前台
  3. /// </summary>
  4. /// <param name="dt">数据表</param>
  5. /// <returns>JSON字符串</returns>
  6. public string DataTableToJson(DataTable dt)
  7. {
  8. StringBuilder JsonString = new StringBuilder();
  9. if (dt != null && dt.Rows.Count > 0)
  10. {
  11. JsonString.Append("{ ");
  12. JsonString.Append("\"TableInfo\":[ ");
  13. for (int i = 0; i < dt.Rows.Count; i++)
  14. {
  15. JsonString.Append("{ ");
  16. for (int j = 0; j < dt.Columns.Count; j++)
  17. {
  18. if (j < dt.Columns.Count - 1)
  19. {
  20. JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
  21. }
  22. else if (j == dt.Columns.Count - 1)
  23. {
  24. JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
  25. }
  26. }
  27. if (i == dt.Rows.Count - 1)
  28. {
  29. JsonString.Append("} ");
  30. }
  31. else
  32. {
  33. JsonString.Append("}, ");
  34. }
  35. }
  36. JsonString.Append("]}");
  37. return JsonString.ToString();
  38. }
  39. else
  40. {
  41. return null;
  42. }
  43. }

//还有一种方式操作json类型数据:

  1. public static class JsonTableHelper
  2. {
  3. /// <summary>
  4. /// 返回对象序列化
  5. /// </summary>
  6. /// <param name="obj">源对象</param>
  7. /// <returns>json数据</returns>
  8. public static string ToJson(this object obj)
  9. {
  10. JavaScriptSerializer serialize = new JavaScriptSerializer();
  11. return serialize.Serialize(obj);
  12. }
  13. /// <summary>
  14. /// 控制深度
  15. /// </summary>
  16. /// <param name="obj">源对象</param>
  17. /// <param name="recursionDepth">深度</param>
  18. /// <returns>json数据</returns>
  19. public static string ToJson(this object obj, int recursionDepth)
  20. {
  21. JavaScriptSerializer serialize = new JavaScriptSerializer();
  22. serialize.RecursionLimit = recursionDepth;
  23. return serialize.Serialize(obj);
  24. }
  25. /// <summary>
  26. /// DataTable转为json
  27. /// </summary>
  28. /// <param name="dt">DataTable</param>
  29. /// <returns>json数据</returns>
  30. public static string ToJson(DataTable dt)
  31. {
  32. Dictionary<string, object> dic = new Dictionary<string, object>();
  33. int index = 0;
  34. foreach (DataRow dr in dt.Rows)
  35. {
  36. Dictionary<string, object> result = new Dictionary<string, object>();
  37. foreach (DataColumn dc in dt.Columns)
  38. {
  39. result.Add(dc.ColumnName, dr[dc].ToString());
  40. }
  41. dic.Add(index.ToString(), result);
  42. index++;
  43. }
  44. return ToJson(dic);
  45. }
  46. }

C#操作json类型数据的更多相关文章

  1. SQL操作json类型数据的函数

    MySQL5.7之后对json数据格式进行了函数支持 Json_contains(字段名, '值') 1.表中json格式的某个字段 2.json里的某个键值 Json_search(字段名, 'on ...

  2. MySQL JSON 类型数据操作

    1.Java 中动态扩展字段,会导致数据库表被锁,在MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以将一个字段设定成varchar类型,里面存放JSON格式数据,这样在 ...

  3. json进阶(一)js读取解析JSON类型数据

    js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...

  4. tablib.Dataset()操作exl类型数据之“类方法”研究

    #tablib.Dataset()操作exl类型数据之“类方法”研究 import tablib #初始化 data=tablib.Dataset() #设置列标题 data.headers=('na ...

  5. Struts2+Jquery实现ajax并返回json类型数据

    来源于:http://my.oschina.net/simpleton/blog/139212 摘要 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的 ...

  6. 转载:Struts2+Jquery实现ajax并返回json类型数据

    摘要: 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的数据,并转换为json类型模式数据 3.配置struts.xml文件 4.页面脚本接受并处理数 ...

  7. js读取解析JSON类型数据【申明:来源于网络】

    js读取解析JSON类型数据[申明:来源于网络] 地址:http://blog.csdn.net/sunhuaqiang1/article/details/47026841

  8. Python数据结构同Json类型数据相互转换的用法

    在做Python接口自动化的时候,经常要用到Python数据结构同Json类型数据相互转换来供我们做进一步的验证提供数据,在此做个记录和总结 Python数据结构同Json类型数据相互转换的函数有:j ...

  9. mysql 5.7 laravel json类型数据相关操作

    2018年10月16日18:14:21 官方文档中文翻译版 原文:https://dev.mysql.com/doc/refman/5.7/en/json.html 最后有部分实例和一个小总结 11. ...

随机推荐

  1. UI控件(ios)---UIImageView

    在实现网络异步存储中,突然发现对控件UIImageView有点生疏了,在这里复习一下. UIImageView,顾名思义是用来放置image的. 1.初始化UIImageView   UIImageV ...

  2. sqlserver -- 查看当前数据库的数据表(备忘)

    @_@||... 记性不好,备忘... 语句功能:查看当前数据库的所有表(根据所需,进行语句改写即可) SELECT * FROM sysobjects WHERE (xtype = 'U') 备注: ...

  3. JS在在线人数和访问人数

    var date=new Date();var expiresDays=10;var count=1500+parseInt(date.getTime()/1000)-parseInt(date.ge ...

  4. 研究table-cell和overflow

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 在Eclipse添加Android兼容包( v4、v7 appcompat )(转)

    昨天添加Android兼容包,碰到了很多问题,在这里记录一下,让后面的路好走. 如何选择兼容包, 请参考Android Support Library Features(二) 一.下载Support ...

  6. 蜗牛—ORACLE基础之学习(二)

    如何创建一个表,这个表和还有一个表的结构一样但没有数据是个空表,旧表的数据也插入的 create table newtable as select * from oldtable 清空一个表内的数据 ...

  7. [.NET] [.net 脱壳工具]Sixxpack 最新脱壳机 通杀Sixxpack全版本by -=Msdn5 君临=

    [.net 脱壳工具]Sixxpack 最新脱壳机 通杀Sixxpack全版本by -=Msdn5 君临=- 识别方法: 如果无法调戏,请上传附件艾特我.............发帖不易啊..身处大西 ...

  8. Select、Poll与Epoll比較

    (1)select select最早于1983年出如今4.2BSD中,它通过一个select()系统调用来监视多个文件描写叙述符的数组.当select()返回后,该数组中就绪的文件描写叙述符便会被内核 ...

  9. unity,荧光效果(bloom)实现过程

    两个月前,刚接触unity的时候费了半天劲儿做了个荧光效果(见:http://www.cnblogs.com/wantnon/p/4430749.html),今天终于抽空整理了一下,把过程写下来. 荧 ...

  10. Swift - 通过叠加UILabel来实现混合的进度条

    Swift - 通过叠加UILabel来实现混合的进度条 效果 源码 https://github.com/YouXianMing/Swift-Animations // // MixedColorP ...