利用.NET 3.5以後的擴充套件方法重寫JSON序列化和反序列化,在程式碼可讀性和可維護性上更加加強了。
首先是不使用擴充套件方法的寫法
定義部分:
- /// <summary>
- /// JSON序列化反序列化工具
- /// </summary>
- public class JSONControl
- {
- /// <summary>
- /// JSON序列化
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="_Object"></param>
- /// <returns></returns>
- public static String JsonSerializer<T>(T _Object)
- {
- using (MemoryStream TempMemoryStream = new MemoryStream())
- {
- String MySerializationString = String.Empty;
- DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
- MyDataContractJsonSerializer.WriteObject(TempMemoryStream, _Object);
- MySerializationString = Encoding.UTF8.GetString(TempMemoryStream.ToArray());
- return MySerializationString;
- }
- }
- /// <summary>
- /// 反序列化
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="_JsonString"></param>
- /// <returns></returns>
- public static T JsonDeserializer<T>(String _JsonString)
- {
- using (MemoryStream TempMemoryStream = new MemoryStream(Encoding.UTF8.GetBytes(_JsonString)))
- {
- DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
- return (T)MyDataContractJsonSerializer.ReadObject(TempMemoryStream);
- }
- }
- }
使用部分:
- /// <summary>
- /// 場景控制物件
- /// </summary>
- public class SceneControl
- {
- /// <summary>
- /// 臨時序列化物件
- /// </summary>
- [DataContract]
- public class TempClass
- {
- /// <summary>
- /// 屬性1
- /// </summary>
- [DataMember(Name = "Property1")]
- public String Property1 { get; set; }
- /// <summary>
- /// 屬性2
- /// </summary>
- [DataMember(Name = "Property2")]
- public String Property2 { get; set; }
- }
- /// <summary>
- /// 測試
- /// </summary>
- public void Test()
- {
- String JsonString = "{'Property1':'111','Property2':'2'}";
- TempClass MyTempClass = JSONControl.JsonDeserializer<TempClass>(JsonString);
- }
- }
然後是使用擴充套件方法的寫法
定義部分:
- /// <summary>
- /// JSON序列化反序列化工具
- /// </summary>
- public static class JSONControl
- {
- /// <summary>
- /// JSON序列化
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="_Object"></param>
- /// <returns></returns>
- public static String ObjectToJson<T>(this T _Object)
- {
- using (MemoryStream TempMemoryStream = new MemoryStream())
- {
- String MySerializationString = String.Empty;
- DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
- MyDataContractJsonSerializer.WriteObject(TempMemoryStream, _Object);
- MySerializationString = Encoding.UTF8.GetString(TempMemoryStream.ToArray());
- return MySerializationString;
- }
- }
- /// <summary>
- /// JSON反序列化
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="_JsonString"></param>
- /// <returns></returns>
- public static T JsonToObject<T>(this String _JsonString)
- {
- using (MemoryStream TempMemoryStream = new MemoryStream(Encoding.UTF8.GetBytes(_JsonString)))
- {
- DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
- return (T)MyDataContractJsonSerializer.ReadObject(TempMemoryStream);
- }
- }
- }
使用部分:
- /// <summary>
- /// 場景控制物件
- /// </summary>
- public class SceneControl
- {
- /// <summary>
- /// 臨時序列化物件
- /// </summary>
- [DataContract]
- public class TempClass
- {
- /// <summary>
- /// 屬性1
- /// </summary>
- [DataMember(Name = "Property1")]
- public String Property1 { get; set; }
- /// <summary>
- /// 屬性2
- /// </summary>
- [DataMember(Name = "Property2")]
- public String Property2 { get; set; }
- }
- /// <summary>
- /// 測試
- /// </summary>
- public void Test()
- {
- String JsonString = "{'Property1':'111','Property2':'2'}";
- TempClass MyTempClass = JsonString.JsonToObject<TempClass>();
- }
- }
原文地址:http://zhangrou.net/post/2014/06/23/利用擴充套件方法重寫JSON序列化和反序列化.aspx