<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
JSON(JavaScriptObject Notation, JS 物件標記) 是一種輕量級的資料交換格式。
關於記憶體物件和JSON字串的相互轉換,在實際專案中應比較廣泛,經過一番搜尋,找到如下三種方法來解決此問題
分別是使用Newtonsoft.Json.dll
、DataContractJsonSerializer
、JavaScriptSerializer
。
Newtonsoft.Json.dll在.net2.0之後的版本可以支援 我的版本.net framework4.0
class JsonNewtonsoft { /// <summary> /// 把物件轉換為JSON字串 /// </summary> /// <param name="o">物件</param> /// <returns>JSON字串</returns> public static string ToJSON(this object o) { if (o == null) { return null; } return JsonConvert.SerializeObject(o); } /// <summary> /// 把Json文字轉為實體 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="input"></param> /// <returns></returns> public static T FromJSON<T>(this string input) { try { return JsonConvert.DeserializeObject<T>(input); } catch (Exception ex) { return default(T); } } }
使用這種 需要參照System.Runtime.Serialization.dll
class JsonDataContractJsonSerializer { /// <summary> /// 記憶體物件轉換為json字串 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string ObjectToJson(object obj) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); MemoryStream stream = new MemoryStream(); serializer.WriteObject(stream, obj); byte[] dataBytes = new byte[stream.Length]; stream.Position = 0; stream.Read(dataBytes, 0, (int)stream.Length); return Encoding.UTF8.GetString(dataBytes); } /// <summary> /// Json字串轉記憶體物件 /// </summary> /// <param name="jsonString"></param> /// <param name="obj"></param> /// <returns></returns> public static object JsonToObject(string jsonString, object obj) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); return serializer.ReadObject(mStream); } }
需要參照:System.Web.Extensions.dll
public static class JsonJavaScriptSerializer { /// <summary> /// 記憶體物件轉換為json字串 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string ToJSON(object obj) { StringBuilder sb = new StringBuilder(); JavaScriptSerializer json = new JavaScriptSerializer(); json.Serialize(obj, sb); return sb.ToString(); } /// <summary> /// Json字串轉記憶體物件 /// </summary> /// <param name="jsonString"></param> /// <param name="obj"></param> /// <returns></returns> public static T FromJSON<T>(string jsonString) { JavaScriptSerializer json = new JavaScriptSerializer(); return json.Deserialize<T>(jsonString); } }
新建一個測試物件類Student.cs
public enum Sex { 男=0, 女=1 } [Serializable()] class Student { private string _name; public string Name { get { return _name; } set { _name = value; } } private int _age; public int Age { get { return _age; } set { _age = value; } } private Sex _sex = Sex.男; public Sex Sex { get { return _sex; } set { _sex = value; } } public Student() { } public Student(string name,int age,Sex sex) { this._name = name; this._age = age; this._sex = sex; } }
測試程式
static void Main(string[] args) { Student st = new Student("笨男孩",22,Sex.男); Console.WriteLine("============方法一============================================"); //方法一 Console.WriteLine("方法一物件轉Json字串"); string jsonStr = JsonNewtonsoft.ToJSON(st); Console.WriteLine(jsonStr); Console.WriteLine("方法一Json字串轉物件"); Student stobj = (Student)JsonNewtonsoft.FromJSON<Student>(jsonStr); Console.WriteLine("姓名:{0} 年齡:{1} 性別:{2}",stobj.Name,stobj.Age,stobj.Sex); Console.WriteLine("============方法二============================================"); //方法二 Console.WriteLine("方法二物件轉Json字串"); string jsonStr2 = JsonDataContractJsonSerializer.ToJSON(st); Console.WriteLine(jsonStr2); Console.WriteLine("方法二Json字串轉物件"); Student stobj2 = (Student)JsonDataContractJsonSerializer.FromJSON(jsonStr2, st); Console.WriteLine("姓名:{0} 年齡:{1} 性別:{2}", stobj2.Name, stobj2.Age, stobj2.Sex); Console.WriteLine("============方法三============================================"); //方法二 Console.WriteLine("方法三物件轉Json字串"); string jsonStr3 = JsonJavaScriptSerializer.ToJSON(st); Console.WriteLine(jsonStr3); Console.WriteLine("方法三Json字串轉物件"); Student stobj3 = (Student)JsonJavaScriptSerializer.FromJSON<Student>(jsonStr3); Console.WriteLine("姓名:{0} 年齡:{1} 性別:{2}", stobj3.Name, stobj3.Age, stobj3.Sex); Console.ReadKey(); }
程式執行結果:
執行結果:
效能對比:
綜上所述,一般採用Json.NET方法一比較好!
JavaScriptSerializer類介紹:https://msdn.microsoft.com/zh-cn/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx
DataContractJsonSerializer類介紹:https://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.json.datacontractjsonserializer(v=vs.110).aspx
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對it145.com的支援。如果你想了解更多相關內容請檢視下面相關連結
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45