博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 对象与JSON字符串互相转换的三种方式
阅读量:4302 次
发布时间:2019-05-27

本文共 5660 字,大约阅读时间需要 18 分钟。

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。

  关于内存对象和JSON字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下三种方法来解决此问题

分别是使用 Newtonsoft.Json.dll、DataContractJsonSerializer、 JavaScriptSerializer。 

方法一: Newtonsoft.Json.dll 

Newtonsoft.Json.dll在.net2.0之后的版本可以支持 我的版本.net framework4.0

添加Newtonsoft.json的引用

对象与json字符串转换类设计

复制代码

1     class JsonNewtonsoft 2     { 3         ///  4         /// 把对象转换为JSON字符串 5         ///  6         /// 对象 7         /// 
JSON字符串
8 public static string ToJSON(this object o) 9 {10 if (o == null)11 {12 return null;13 }14 return JsonConvert.SerializeObject(o);15 }16 /// 17 /// 把Json文本转为实体18 /// 19 ///
20 /// 21 ///
22 public static T FromJSON
(this string input)23 {24 try25 {26 return JsonConvert.DeserializeObject
(input);27 }28 catch (Exception ex)29 {30 return default(T);31 }32 }33 }

复制代码

方法二:DataContractJsonSerializer

 使用这种 需要引用 System.Runtime.Serialization.dll

类设计

复制代码

1 class JsonDataContractJsonSerializer 2     { 3         ///  4         /// 内存对象转换为json字符串 5         ///  6         ///  7         /// 
8 public static string ObjectToJson(object obj) 9 {10 DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());11 MemoryStream stream = new MemoryStream();12 serializer.WriteObject(stream, obj);13 byte[] dataBytes = new byte[stream.Length];14 stream.Position = 0;15 stream.Read(dataBytes, 0, (int)stream.Length);16 return Encoding.UTF8.GetString(dataBytes);17 }18 /// 19 /// Json字符串转内存对象20 /// 21 /// 22 /// 23 ///
24 public static object JsonToObject(string jsonString, object obj)25 {26 DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());27 MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));28 return serializer.ReadObject(mStream);29 }30 }

复制代码

方法三:JavaScriptSerializer

需要引用:System.Web.Extensions.dll

类设计

复制代码

1     public static class JsonJavaScriptSerializer 2     { 3         ///  4         /// 内存对象转换为json字符串 5         ///  6         ///  7         /// 
8 public static string ToJSON(object obj) 9 {10 StringBuilder sb = new StringBuilder();11 JavaScriptSerializer json = new JavaScriptSerializer();12 json.Serialize(obj, sb);13 return sb.ToString();14 }15 /// 16 /// Json字符串转内存对象17 /// 18 /// 19 /// 20 ///
21 public static T FromJSON
(string jsonString)22 {23 JavaScriptSerializer json = new JavaScriptSerializer();24 return json.Deserialize
(jsonString);25 }26 27 }

复制代码

程序测试:

新建一个测试对象类Student.cs

复制代码

1     public enum Sex 2     { 3         男=0, 4         女=1 5     } 6     [Serializable()] 7     class Student 8     { 9         private string _name;10 11         public string Name12         {13             get { return _name; }14             set { _name = value; }15         }16 17         private int _age;18 19         public int Age20         {21             get { return _age; }22             set { _age = value; }23         }24 25         private Sex _sex = Sex.男;26 27         public Sex Sex28         {29             get { return _sex; }30             set { _sex = value; }31         }32         public Student()33         { }34         public Student(string name,int age,Sex sex)35         {36             this._name = name;37             this._age = age;38             this._sex = sex;39         }40     }

复制代码

测试程序

复制代码

1         static void Main(string[] args) 2         { 3             Student st = new Student("笨男孩",22,Sex.男); 4  5             Console.WriteLine("============方法一============================================"); 6             //方法一 7  8             Console.WriteLine("方法一对象转Json字符串"); 9             string jsonStr = JsonNewtonsoft.ToJSON(st);10             Console.WriteLine(jsonStr);11             Console.WriteLine("方法一Json字符串转对象");12             Student stobj = (Student)JsonNewtonsoft.FromJSON
(jsonStr);13 Console.WriteLine("姓名:{0} 年龄:{1} 性别:{2}",stobj.Name,stobj.Age,stobj.Sex);14 15 16 Console.WriteLine("============方法二============================================");17 //方法二18 Console.WriteLine("方法二对象转Json字符串");19 string jsonStr2 = JsonDataContractJsonSerializer.ToJSON(st);20 Console.WriteLine(jsonStr2);21 Console.WriteLine("方法二Json字符串转对象");22 Student stobj2 = (Student)JsonDataContractJsonSerializer.FromJSON(jsonStr2, st);23 Console.WriteLine("姓名:{0} 年龄:{1} 性别:{2}", stobj2.Name, stobj2.Age, stobj2.Sex);24 25 26 Console.WriteLine("============方法三============================================");27 //方法二28 Console.WriteLine("方法三对象转Json字符串");29 string jsonStr3 = JsonJavaScriptSerializer.ToJSON(st);30 Console.WriteLine(jsonStr3);31 Console.WriteLine("方法三Json字符串转对象");32 Student stobj3 = (Student)JsonJavaScriptSerializer.FromJSON
(jsonStr3);33 Console.WriteLine("姓名:{0} 年龄:{1} 性别:{2}", stobj3.Name, stobj3.Age, stobj3.Sex);34 35 Console.ReadKey();36 }

复制代码

程序运行结果:

运行结果:

转载地址:http://kwlws.baihongyu.com/

你可能感兴趣的文章
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>
Hive Beeline使用
查看>>
Centos6安装图形界面(hdp不需要,hdp直接从github上下载数据即可)
查看>>
CentOS7 中把yum源更换成163源
查看>>
关于yum Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
查看>>
linux下载github中的文件
查看>>
HDP Sandbox里面git clone不了数据(HTTP request failed)【目前还没解决,所以hive的练习先暂时搁置了】
查看>>
动态分区最佳实践(一定要注意实践场景)
查看>>
HIVE—索引、分区和分桶的区别
查看>>
Hive进阶总结(听课总结)
查看>>
大数据领域两大最主流集群管理工具Ambari和Cloudera Manger
查看>>
Sqoop往Hive导入数据实战
查看>>
Mysql到HBase的迁移
查看>>
Sqoop import进阶
查看>>
Hive语句是如何转化成MapReduce任务的
查看>>