.NET中JSON的序列化和反序列化的几种方式(2)

public ActionResult GetJsonDemo() { //对象 DataModel model = new DataModel(); model.ID = 2; model.Name = "LiSi"; model.Sex = "男"; model.Age = 20; //对象序列化Json string strJson = JsonHelper.ObjectToJson(model); //Json反序列化对象 model = JsonHelper.JsonToObject<DataModel>(strJson); string strContent = "对象序列化:" + strJson + "\n" + "反序列化值:" + model.Name + " " + model.Sex + " " + model.Age; return Content(strContent); }

JsonHelper:

/// <summary> /// Json 帮助类 /// </summary> public class JsonHelper { #region 第二种 JSON.NET //使用Json.NET类库需要引入的命名空间 using Newtonsoft.Json; //注:可用[JsonIgnore]标记不序列化的属性 /// <summary> /// 序列化 /// </summary> /// <param></param> /// <returns></returns> public static string ObjectToJson(object obj) { return JsonConvert.SerializeObject(obj); } /// <summary> /// 反序列化 /// </summary> /// <typeparam></typeparam> /// <param></param> /// <returns></returns> public static T JsonToObject<T>(string strJson) { return JsonConvert.DeserializeObject<T>(strJson); } #endregion }

Result:

.NET中JSON的序列化和反序列化的几种方式

3、DataContractJsonSerializer

使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Serialization.dll.中。

using System.Runtime.Serialization.Json;

实体中的契约[DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必须要加的,对于其他两种方式可加可不加。

PS: 可用[IgnoreDataMember] 标记不序列化的属性

Code:

public ActionResult GetJsonDemo() { //对象 DataModel model = new DataModel(); model.ID = 3; model.Name = "Wangwu"; model.Sex = "女"; model.Age = 22; //对象序列化Json string strJson = JsonHelper.ObjectToJson(model); //Json反序列化对象 model = JsonHelper.JsonToObject<DataModel>(strJson); string strContent = "对象序列化:" + strJson + "\n" + "反序列化值:" + model.Name + " " + model.Sex + " " + model.Age; return Content(strContent); }

JsonHelper:

/// <summary> /// Json 帮助类 /// </summary> public class JsonHelper { #region 第三种 DataContractJsonSerializer //使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Serialization.dll.中 //using System.Runtime.Serialization.Json; //注:可用[IgnoreDataMember] 标记不序列化的属性 //实体中的契约[DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必须要加的 //对于其他两种方式不必加,也可以的。 /// <summary> /// 序列化 /// </summary> /// <param></param> /// <returns></returns> public static string ObjectToJson(object obj) { using (MemoryStream stream = new MemoryStream()) { DataContractJsonSerializer jsonSerialize = new DataContractJsonSerializer(obj.GetType()); jsonSerialize.WriteObject(stream, obj); return Encoding.UTF8.GetString(stream.ToArray()); } } /// <summary> /// 反序列化 /// </summary> /// <typeparam></typeparam> /// <param></param> /// <returns></returns> public static T JsonToObject<T>(string strJson) { using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(strJson))) { DataContractJsonSerializer jsonSerialize = new DataContractJsonSerializer(typeof(T)); return (T)jsonSerialize.ReadObject(stream); } } #endregion }

Result:

.NET中JSON的序列化和反序列化的几种方式

PS: DataModel

[DataContract] public class DataModel { [DataMember] public int ID { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string Sex { get; set; } [DataMember] public int Age { get; set; } }

四、总结

1、JSON序列化有三种方式

JavaScriptSerializer类

JSON.NET类库

DataContractJsonSerializer类

2、尽量使用JSON.NET(开源)来序列化和反序列化,性能好。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdssgd.html