@H_502_5@
在平常中,我们经常会用到将一个T类型的东西,序列化成Json然后返回绑定数据到页面这样一个过程。每次面试,大概都被问到怎么序列化的呀?回答总是底层封装好的,算啦,还是做个简单栗子玩玩儿吧,也好堵住面试官的嘴。@H_502_5@
进行序列化和反序列化的时候,主要用到对象DataContractJsonSerializer,然后再配合MemoryStream,就ok啦。@H_502_5@
不多说,先来一版简单的+泛型的栗子,之后,我们会逐步改进:@H_502_5@
- public@H_502_5@@H_502_5@static@H_502_5@@H_502_5@class@H_502_5@JsonConvert@H_502_5@@H_502_5@
- {@H_502_5@
- @H_404_72@///<summary>@H_502_5@@H_502_5@@H_502_5@
- ///Convertstheobjtojson.@H_502_5@@H_502_5@@H_502_5@
- ///</summary>@H_502_5@@H_502_5@@H_502_5@
- ///<typeparamname="T"></typeparam>@H_502_5@@H_502_5@@H_502_5@
- ///<paramname="t">Thet.</param>@H_502_5@@H_502_5@@H_502_5@
- ///<returns>System.String.</returns>@H_502_5@@H_502_5@@H_502_5@
- ///<remarks>Editor:v-liuhchCreateTime:2015/6/2121:40:55</remarks>@H_502_5@@H_502_5@@H_502_5@
- string@H_502_5@ConvertObjToJson<T>(Tt)@H_502_5@@H_502_5@
- {@H_502_5@
- DataContractJsonSerializerser=new@H_502_5@DataContractJsonSerializer(t.GetType());@H_502_5@@H_502_5@
- @H_502_5@
- try@H_502_5@@H_502_5@@H_502_5@
- using@H_502_5@(MemoryStreamms=@H_502_5@new@H_502_5@MemoryStream())@H_502_5@@H_502_5@
- ser.WriteObject(ms,t);@H_502_5@
- string@H_502_5@strJson=Encoding.UTF8.GetString(ms.ToArray());@H_502_5@@H_502_5@
- return@H_502_5@strJson;@H_502_5@@H_502_5@
- }@H_502_5@
- @H_502_5@
- catch@H_502_5@(IOException)@H_502_5@@H_502_5@
- //自己处理异常吧@H_502_5@@H_502_5@@H_502_5@
- return@H_502_5@@H_502_5@null@H_502_5@;@H_502_5@@H_502_5@
- }@H_502_5@
- ///Jsonsthedeserialize.@H_502_5@@H_502_5@@H_502_5@
- ///<paramname="strJson">TheSTRjson.</param>@H_502_5@@H_502_5@@H_502_5@
- ///<returns>``0.</returns>@H_502_5@@H_502_5@@H_502_5@
- ///<remarks>Editor:v-liuhchCreateTime:2015/6/2121:46:37</remarks>@H_502_5@@H_502_5@@H_502_5@
- static@H_502_5@TJsonDeserialize<T>(@H_502_5@string@H_502_5@strJson)@H_502_5@@H_502_5@
- whereT:class@H_502_5@@H_502_5@//约束T为class,也可以放宽类型,这里只是个例子,写着玩儿的,欧巴们,此处可改@H_502_5@@H_502_5@@H_502_5@
- new@H_502_5@DataContractJsonSerializer(@H_502_5@typeof@H_502_5@(T));@H_502_5@@H_502_5@
- new@H_502_5@MemoryStream(Encoding.UTF8.GetBytes(strJson)))@H_502_5@@H_502_5@
- Tobj=ser.ReadObject(ms)as@H_502_5@T;@H_502_5@@H_502_5@
- return@H_502_5@obj;@H_502_5@@H_502_5@
- catch@H_502_5@(IOExceptione)@H_502_5@@H_502_5@
- }@H_502_5@
@H_502_5@
@H_502_5@
然后我们写个类测试下:@H_502_5@
@H_502_5@
- //[Serializable]@H_502_5@@H_502_5@@H_502_5@
- class@H_502_5@Student@H_502_5@@H_502_5@
- string@H_502_5@StudentId{@H_502_5@get@H_502_5@;@H_502_5@set@H_502_5@;}@H_502_5@@H_502_5@
- string@H_502_5@Name{@H_502_5@set@H_502_5@;}@H_502_5@@H_502_5@
- int@H_502_5@age{@H_502_5@string@H_502_5@Address{@H_502_5@ }@H_502_5@