博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSON字符串互相转换的三种方式和性能比较
阅读量:4589 次
发布时间:2019-06-09

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

C# 对象与JSON字符串互相转换的三种方式

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 }

程序运行结果:

运行结果:

功能对比:

 

性能对比:

综上所述,一般采用Json.NET方法一比较好!

参考:

类介绍 https://msdn.microsoft.com/zh-cn/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx

类介绍 https://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.json.datacontractjsonserializer(v=vs.110).aspx

https://blog.csdn.net/testcs_dn/article/details/78150046?locationNum=6&fps=1

 

 

出处:https://www.cnblogs.com/JiYF/p/8628942.html

转载于:https://www.cnblogs.com/mq0036/p/9415040.html

你可能感兴趣的文章
第二次试验报告
查看>>
(转载)C# ListView用法详解
查看>>
R语言入门心得(1) -- 下载与安装
查看>>
正则表达式
查看>>
C#中linq报“Character literal must contain exactly one character”的错误提示
查看>>
eclipse中设置自动生成的author,date等注释
查看>>
【插件开发】—— 12 GEF入门
查看>>
消息提示
查看>>
isinstance(obj1,class) 可以判断前者是否是后者的实例
查看>>
数据库中怎么查询所有的表名
查看>>
Andrew Ng-ML-第十六章-异常检测
查看>>
全概率+贝叶斯[转载]
查看>>
浅析Cross Origin Resource Sharing
查看>>
Intent详解
查看>>
JS:九宫格抽奖转盘实例
查看>>
【洛谷P1801】黑匣子_NOI导刊2010提高(06)
查看>>
【UIKit】UIView的常见属性
查看>>
Python 全局变量
查看>>
数据结构 树的链式存储(三叉表示法)
查看>>
【04】Cent OS 7 中部署JDK + Tomcat 环境
查看>>