使用.net 3.5的DataContractJsonSerializer进行JSON Serialization

(转)使用.net 3.5的DataContractJsonSerializer进行JSON Serialization

(2011-08-30 18:25:39)

 可能你看到这个东东的时候还不理解它是什么,但是如果在.net之前的版本你用过JavaScriptSerializer方法的话,应该就明白了,它在.net 3.5中取代了JavaScriptSerialize进行JSON的serialization和deserialization功能。

注意:需要引入命名空间

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;(
这个.NET Framework 3.5需要添加引用:System.Web.Extensions.dll

备注:关于另一个json操作类JavaScriptSerializer需要引入命名空间

using System.Web.Script.Serialization;(这个需要添加引用:System.Web.Extensions.dll 

这里举个例子来看,创建一个对象是Person它有FirstName和LastName属性。

  1. public class Person  
  2.  
  3.     public Person()  
  4.     public Person(string firstname, string lastname)  
  5.      
  6.         this.FirstName firstname;  
  7.         this.LastName lastname;  
  8.      
  9.     public string FirstName getset 
  10.     public string LastName getset 
  11.   

 

现在,为了能够让我们的对象通过使用DataContractJsonSerializer转化为JSON,我们需要让为它加上Serializable或者是DataContract属性。

  1. public class Person  
  2.  
  3.     public Person()  
  4.     public Person(string firstname, string lastname)  
  5.      
  6.         this.FirstName firstname;  
  7.         this.LastName lastname;  
  8.      
  9.     public string FirstName getset 
  10.     public string LastName getset 
  11.   
  12.  
  13.   
  14. /// Marked with the DataContact Attribute   
  15. [DataContract]  
  16. public class Person  
  17.  
  18.     public Person()  
  19.     public Person(string firstname, string lastname)  
  20.      
  21.         this.FirstName firstname;  
  22.         this.LastName lastname;  
  23.      
  24.   
  25.     [DataMember]  
  26.     public string FirstName getset 
  27.   
  28.     [DataMember]  
  29.     public string LastName getset 
  30.   

 

下面的代码是实现Person的serialize。

  1. Person myPerson new Person("Chris""Pietschmann");  
  2.   
  3. /// Serialize to JSON   
  4. System.Runtime.Serialization.Json.DataContractJsonSerializer serializer new System.Runtime.Serialization.Json.DataContractJsonSerializer(myPerson.GetType());  
  5. MemoryStream ms new MemoryStream();  
  6. serializer.WriteObject(ms, myPerson);  
  7. string json Encoding.Default.GetString(ms.ToArray());   

 

如果我们使用的Person对象添加了Serializable属性,那么序列化后的结果如下:

/// Result of Person class marked as Serializable
{"<FirstName>k__BackingField":"Chris","<LastName>k__BackingField":"Pietschmann"}

如果是DataContract属性最后结果为:

/// Result of Person class marked as DataContract with
/// each Property marked as DataMember

{"FirstName":"Chris","LastName":"Pietschmann"}

 

今天做个东西需要用到json序列化,正好用到这个东西。不过熟悉generics的话,使用了generics的帮忙让序列化和反序列化都那么容易了。

 

贴出他的代码,希望大家能够看懂:

  1. using System.Runtime.Serialization;  
  2. using System.Runtime.Serialization.Json;  
  3.   
  4. public class JSONHelper  
  5.  
  6.     public static string Serialize<T>(T obj)  
  7.      
  8.         System.Runtime.Serialization.Json.DataContractJsonSerializer serializer new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());  
  9.         MemoryStream ms new MemoryStream();  
  10.         serializer.WriteObject(ms, obj);  
  11.         string retVal Encoding.Default.GetString(ms.ToArray());  
  12.         return retVal;  
  13.      
  14.   
  15.     public static Deserialize<T>(string json)  
  16.      
  17.         obj Activator.CreateInstance<T>();  
  18.         MemoryStream ms new MemoryStream(Encoding.Unicode.GetBytes(json));  
  19.         System.Runtime.Serialization.Json.DataContractJsonSerializer serializer new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());  
  20.         obj (T)serializer.ReadObject(ms);  
  21.         ms.Close();  
  22.         return obj;  
  23.      
  24.  
  25.   
  26. /// Our Person object to Serialize/Deserialize to JSON   
  27. [DataContract]  
  28. public class Person  
  29.  
  30.     public Person()  
  31.     public Person(string firstname, string lastname)  
  32.      
  33.         this.FirstName firstname;  
  34.         this.LastName lastname;  
  35.      
  36.   
  37.     [DataMember]  
  38.     public string FirstName getset 
  39.   
  40.     [DataMember]  
  41.     public string LastName getset 
  42.  
  43.   
  44.   
  45. /// Sample code using the above helper methods   
  46. /// to serialize and deserialize the Person object   
  47.   
  48. Person myPerson new Person("Chris""Pietschmann");  
  49.   
  50. // Serialize   
  51. string json JSONHelper.Serialize<Person>(myPerson);  
  52.   
  53. // Deserialize   
  54. myPerson JSONHelper.Deserialize<Person>(json);  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值