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

本文共 5654 字,大约阅读时间需要 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://tnlws.baihongyu.com/

你可能感兴趣的文章
Git(四) - 分支管理
查看>>
PHP Curl发送数据
查看>>
HTTP协议
查看>>
HTTPS
查看>>
git add . git add -u git add -A区别
查看>>
apache下虚拟域名配置
查看>>
session和cookie区别与联系
查看>>
PHP 实现笛卡尔积
查看>>
Laravel中的$loop
查看>>
CentOS7 重置root密码
查看>>
Centos安装Python3
查看>>
PHP批量插入
查看>>
laravel连接sql server 2008
查看>>
Laravel 操作redis的各种数据类型
查看>>
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>