要做json的序列化和反序列化,首先需要我们定义json对应的csharp类:
假定我们要序列化Person类,如下代码定义:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Runtime.Serialization; namespace WebApplication1 { [Serializable] [DataContract] public class Person { [DataMember(Order=1,Name="id")] public int ID { get; set; } [DataMember(Order=2,Name="name")] public String Name { get; set; } } }
需要注意Person类必须指定DataContract attribute,否则会出现属性名称都是k__BackingField的问题。另外需要做json序列化的属性必须设置DataMember的属 性,可以指定Order和Name,分别表示顺序号和属性序列化时的名称。
定义好了Person类,我们就可以使用DataContractJsonSerializer类来做json的序列化和反序列化了。
注意要使用DataContractJsonSerializer做json的序列化和反序列化,必须在web项目中引用:
System.Runtime.Serialization System.ServiceModel System.ServiceModel.Web 三个程序集。
DataContractJsonSerializer类提供了WriteObject(Stream,Object)和ReadObject(Object)两个方法来做json的序列化和反序列化。
如下是样例代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Runtime.Serialization.Json; using System.IO; using System.Text; namespace WebApplication1 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Person person = new Person { ID = 1,Name="OutOfMemory.CN" }; DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Person)); //序列化json对象 using (var ms = new MemoryStream()) { jsonSerializer.WriteObject(ms, person); String json = Encoding.UTF8.GetString(ms.ToArray()); literalJson.Text = json; } //反序列化json对象 var jsonText = @"{""id"":2,""name"":""OutOfMemory.CN""}"; using (var ms = new MemoryStream()) { var buffer = Encoding.UTF8.GetBytes(jsonText); ms.Write(buffer, 0, buffer.Length); ms.Seek(0, SeekOrigin.Begin); var objPerson = (Person)jsonSerializer.ReadObject(ms); literalPersonInfo.Text = string.Format("person id == {0},person name = {1}", objPerson.ID, objPerson.Name); } } } }
上面的方法只能对Person类做序列化和反序列化,我们也可以写成一个泛型方法,来方便使用: 如下代码:
public static class JsonConvert{ public static string Serialize<T>(T obj) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, obj); return Encoding.Default.GetString(ms.ToArray()); } } public static T Deserialise<T>(string json) { T obj = Activator.CreateInstance<T>(); using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); obj = (T)serializer.ReadObject(ms); return obj; } } }
介绍完毕。
0人收藏
- 5月前c#使用JavaScriptSerializer来做json的序列化和反序列化 by empireghost
- 7月前asp.net mvc3中的ajax by 好好学习啊
- 5月前Asp.Net 读写Excel数据代码 by 吴红军
- 6月前c#将json转换为dynamic对象 by lihuibng
- 5月前Asp.Net JSON序列化 by 司马
- 7月前C#获得汉字拼音声母类 by moxia
- 7月前c#计算素数 by vzex
- 7月前C# 获得当前运行程序所在的目录 by Hugh
- 7月前C# 生成MD5代码示例 by 卷毛
- 6月前C# 数据表排序 by jellyvice
发表评论
