利用扩展方法重写JSON序列化和反序列化

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

利用.NET 3.5以后的扩展方法重写JSON序列化和反序列化,在代码可读性和可维护性上更加加强了。

首先是不使用扩展方法的写法

定义部分:

/// <summary> /// JSON序列化反序列化工具 /// </summary> public classJSONControl { /// <summary> /// JSON序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="_Object"></param> /// <returns></returns> public staticString JsonSerializer<T>(T _Object) { using(MemoryStream TempMemoryStream =newMemoryStream()) { String MySerializationString = String.Empty; DataContractJsonSerializer MyDataContractJsonSerializer =newDataContractJsonSerializer(typeof(T)); MyDataContractJsonSerializer.WriteObject(TempMemoryStream, _Object); MySerializationString = Encoding.UTF8.GetString(TempMemoryStream.ToArray()); returnMySerializationString; } } /// <summary> /// 反序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="_JsonString"></param> /// <returns></returns> public staticT JsonDeserializer<T>(String _JsonString) { using(MemoryStream TempMemoryStream =newMemoryStream(Encoding.UTF8.GetBytes(_JsonString))) { DataContractJsonSerializer MyDataContractJsonSerializer =newDataContractJsonSerializer(typeof(T)); return(T)MyDataContractJsonSerializer.ReadObject(TempMemoryStream); } } }

使用部分:

/// <summary> /// 场景控制对象 /// </summary> public classSceneControl { /// <summary> /// 临时序列化对象 /// </summary> [DataContract] public classTempClass { /// <summary> /// 属性1 /// </summary> [DataMember(Name ="PRoperty1")] publicString Property1 {get;set; } /// <summary> /// 属性2 /// </summary> [DataMember(Name ="Property2")] publicString Property2 {get;set; } } /// <summary> /// 测试 /// </summary> public voidTest() { String JsonString ="{'Property1':'111','Property2':'2'}"; TempClass MyTempClass = JSONControl.JsonDeserializer<TempClass>(JsonString); } }

然后是使用扩展方法的写法

定义部分:

/// <summary> /// JSON序列化反序列化工具 /// </summary> public static classJSONControl { /// <summary> /// JSON序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="_Object"></param> /// <returns></returns> public staticString ObjectToJson<T>(thisT _Object) { using(MemoryStream TempMemoryStream =newMemoryStream()) { String MySerializationString = String.Empty; DataContractJsonSerializer MyDataContractJsonSerializer =newDataContractJsonSerializer(typeof(T)); MyDataContractJsonSerializer.WriteObject(TempMemoryStream, _Object); MySerializationString = Encoding.UTF8.GetString(TempMemoryStream.ToArray()); returnMySerializationString; } } /// <summary> /// JSON反序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="_JsonString"></param> /// <returns></returns> public staticT JsonToObject<T>(thisString _JsonString) { using(MemoryStream TempMemoryStream =newMemoryStream(Encoding.UTF8.GetBytes(_JsonString))) { DataContractJsonSerializer MyDataContractJsonSerializer =newDataContractJsonSerializer(typeof(T)); return(T)MyDataContractJsonSerializer.ReadObject(TempMemoryStream); } } }

使用部分:

/// <summary> /// 场景控制对象 /// </summary> public classSceneControl { /// <summary> /// 临时序列化对象 /// </summary> [DataContract] public classTempClass { /// <summary> /// 属性1 /// </summary> [DataMember(Name ="Property1")] publicString Property1 {get;set; } /// <summary> /// 属性2 /// </summary> [DataMember(Name ="Property2")] publicString Property2 {get;set; } } /// <summary> /// 测试 /// </summary> public voidTest() { String JsonString ="{'Property1':'111','Property2':'2'}"; TempClass MyTempClass = JsonString.JsonToObject<TempClass>(); } }

原文地址:http://zhangrou.net/post/2014/06/23/利用扩展方法重写JSON序列化和反序列化.aspx

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航