使用.NET框架自带的Json序列化类
主要用到的类:DataContractJsonSerializer,该类被申明在System.Runtime.Serialization.Json命名空间下,而System.Runtime.Serialization.Json命名空间是被放置在System.ServiceModel.Web.dll程序集里,因此我们要用到DataContractJsonSerializer类,首先应添加对System.ServiceModel.Web的引用,然后添加System.Runtime.Serialization.Json命名空间,注意DataContractJsonSerializer序列化的方式是采用数据契约序列化,因此我们可以通过DataMemberAttribute来控制那些被序列化,那些不被序列化。
例如,我们这里有一个类:
例如,我们这里有一个类:
1 [DataContract]
2 public class User
3 {
4 public User() { }
5 [DataMember]
6 public bool IsMember { get; set; }
7 [DataMember]
8 public string Name { get; set; }
9 public int Age { get; set; }
10 }
2 public class User
3 {
4 public User() { }
5 [DataMember]
6 public bool IsMember { get; set; }
7 [DataMember]
8 public string Name { get; set; }
9 public int Age { get; set; }
10 }
我们现在在一个ashx文件里创建一个实例并将其序列化:
public class JsonWriter : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(User));
User user = new User() { IsMember = true, Name = "Zhang Liang", Age = 24 };
serializer.WriteObject(context.Response.OutputStream, user);
context.Response.ContentType = "text/plain";
}
public bool IsReusable {
get {
return false;
}
}
}
{
public void ProcessRequest (HttpContext context)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(User));
User user = new User() { IsMember = true, Name = "Zhang Liang", Age = 24 };
serializer.WriteObject(context.Response.OutputStream, user);
context.Response.ContentType = "text/plain";
}
public bool IsReusable {
get {
return false;
}
}
}
看输出结果:
{"IsMember":true,"Name":"Zhang Liang"}
反序列化:
public class JsonWriter : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(User));
User user = serializer.ReadObject(context.Request.InputStream) as User;
//.使用User对象
context.Response.Write("OK");
context.Response.ContentType = "text/plain";
}
public bool IsReusable {
get {
return false;
}
}
}
{
public void ProcessRequest (HttpContext context)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(User));
User user = serializer.ReadObject(context.Request.InputStream) as User;
//.使用User对象
context.Response.Write("OK");
context.Response.ContentType = "text/plain";
}
public bool IsReusable {
get {
return false;
}
}
}