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