日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發(fā)布時(shí)間:2023/12/18 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 中对象与JSON字符串相互转换的三种方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JSON(JavaScript?Object Notation, JS 對象標(biāo)記) 是一種輕量級的數(shù)據(jù)交換格式。

  關(guān)于內(nèi)存對象和JSON字符串的相互轉(zhuǎn)換,在實(shí)際項(xiàng)目中應(yīng)比較廣泛,經(jīng)過一番搜索,找到如下三種方法來解決此問題

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

方法一:?Newtonsoft.Json.dll?

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

添加Newtonsoft.json的引用

對象與json字符串轉(zhuǎn)換類設(shè)計(jì)

1 class JsonNewtonsoft2 {3 /// <summary>4 /// 把對象轉(zhuǎn)換為JSON字符串5 /// </summary>6 /// <param name="o">對象</param>7 /// <returns>JSON字符串</returns>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 /// <summary> 17 /// 把Json文本轉(zhuǎn)為實(shí)體 18 /// </summary> 19 /// <typeparam name="T"></typeparam> 20 /// <param name="input"></param> 21 /// <returns></returns> 22 public static T FromJSON<T>(this string input) 23 { 24 try 25 { 26 return JsonConvert.DeserializeObject<T>(input); 27 } 28 catch (Exception ex) 29 { 30 return default(T); 31 } 32 } 33 }

方法二:DataContractJsonSerializer

?使用這種 需要引用?System.Runtime.Serialization.dll

類設(shè)計(jì)

1 class JsonDataContractJsonSerializer2 {3 /// <summary>4 /// 內(nèi)存對象轉(zhuǎn)換為json字符串5 /// </summary>6 /// <param name="obj"></param>7 /// <returns></returns>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 /// <summary> 19 /// Json字符串轉(zhuǎn)內(nèi)存對象 20 /// </summary> 21 /// <param name="jsonString"></param> 22 /// <param name="obj"></param> 23 /// <returns></returns> 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

類設(shè)計(jì)

1 public static class JsonJavaScriptSerializer2 {3 /// <summary>4 /// 內(nèi)存對象轉(zhuǎn)換為json字符串5 /// </summary>6 /// <param name="obj"></param>7 /// <returns></returns>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 /// <summary> 16 /// Json字符串轉(zhuǎn)內(nèi)存對象 17 /// </summary> 18 /// <param name="jsonString"></param> 19 /// <param name="obj"></param> 20 /// <returns></returns> 21 public static T FromJSON<T>(string jsonString) 22 { 23 JavaScriptSerializer json = new JavaScriptSerializer(); 24 return json.Deserialize<T>(jsonString); 25 } 26 27 }

程序測試:

新建一個(gè)測試對象類Student.cs

1 public enum Sex2 {3 男=0,4 女=15 }6 [Serializable()]7 class Student8 {9 private string _name; 10 11 public string Name 12 { 13 get { return _name; } 14 set { _name = value; } 15 } 16 17 private int _age; 18 19 public int Age 20 { 21 get { return _age; } 22 set { _age = value; } 23 } 24 25 private Sex _sex = Sex.男; 26 27 public Sex Sex 28 { 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("方法一對象轉(zhuǎn)Json字符串");9 string jsonStr = JsonNewtonsoft.ToJSON(st); 10 Console.WriteLine(jsonStr); 11 Console.WriteLine("方法一Json字符串轉(zhuǎn)對象"); 12 Student stobj = (Student)JsonNewtonsoft.FromJSON<Student>(jsonStr); 13 Console.WriteLine("姓名:{0} 年齡:{1} 性別:{2}",stobj.Name,stobj.Age,stobj.Sex); 14 15 16 Console.WriteLine("============方法二============================================"); 17 //方法二 18 Console.WriteLine("方法二對象轉(zhuǎn)Json字符串"); 19 string jsonStr2 = JsonDataContractJsonSerializer.ToJSON(st); 20 Console.WriteLine(jsonStr2); 21 Console.WriteLine("方法二Json字符串轉(zhuǎn)對象"); 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("方法三對象轉(zhuǎn)Json字符串"); 29 string jsonStr3 = JsonJavaScriptSerializer.ToJSON(st); 30 Console.WriteLine(jsonStr3); 31 Console.WriteLine("方法三Json字符串轉(zhuǎn)對象"); 32 Student stobj3 = (Student)JsonJavaScriptSerializer.FromJSON<Student>(jsonStr3); 33 Console.WriteLine("姓名:{0} 年齡:{1} 性別:{2}", stobj3.Name, stobj3.Age, stobj3.Sex); 34 35 Console.ReadKey(); 36 }

程序運(yùn)行結(jié)果:

?

?

總結(jié)

以上是生活随笔為你收集整理的C# 中对象与JSON字符串相互转换的三种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。