일상생활에서 우리는 T 유형의 것을 Json으로 직렬화한 다음 바인딩된 데이터를 페이지에 반환하는 프로세스를 자주 사용합니다. 인터뷰 때마다 연재를 어떻게 하느냐는 질문을 받을 것 같아요. 답은 항상 최하위 수준에 캡슐화되어 있으니 잊어버리고, 면접관의 입을 막을 수 있도록 재미삼아 간단한 밤을 만들어보자.
직렬화, 역직렬화 시 DataContractJsonSerializer 객체를 주로 사용하고 MemoryStream과 결합하면 괜찮습니다.
더 이상 고민하지 말고 간단하고 일반적인 밤부터 시작해 점차 개선하겠습니다.
public static class JsonConvert { /// <summary> /// Converts the obj to json. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t">The t.</param> /// <returns>System.String.</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/21 21:40:55</remarks> public static string ConvertObjToJson<T>(T t) { DataContractJsonSerializer ser = new DataContractJsonSerializer(t.GetType()); try { using (MemoryStream ms=new MemoryStream()) { ser.WriteObject(ms,t); string strJson=Encoding.UTF8.GetString(ms.ToArray()); return strJson; } } catch (IOException) { //自己处理异常吧 return null; } } /// <summary> /// Jsons the deserialize. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="strJson">The STR json.</param> /// <returns>``0.</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/21 21:46:37</remarks> public static T JsonDeserialize<T>(string strJson) where T:class //约束T为class,也可以放宽类型,这里只是个例子,写着玩儿的,欧巴们,此处可改 { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); try { using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))) { T obj = ser.ReadObject(ms) as T; return obj; } } catch (IOException e) { //自己处理异常吧 return null; } } }
그런 다음 테스트할 클래스를 작성합니다:
//[Serializable] public class Student { public string StudentId { get; set; } public string Name { get; set; } public int age { get; set; } public string Address { get; set; } }
테스트 코드:
protected void Page_Load(object sender, EventArgs e) { Student student = new Student() { StudentId = "110", Name = "水田如雅", age = 20, Address = "北京朝阳区" }; #region 序列化测试 string strStudentJson = JsonConvert.ConvertObjToJson<Student>(student); Response.Write(strStudentJson); #endregion #region 反序列化测试 //{"Address":"北京朝阳区","Name":"水田如雅","StudentId":"110","age":20} string strJson = "{\"Address\":\"北京朝阳区\",\"Name\":\"水田如雅\",\"StudentId\":\"110\",\"age\":20}"; Student newStudent = JsonConvert.JsonDeserialize<Student>(strJson); Response.Write(@"<br/><br/>" + newStudent.Address + "<br/>" + newStudent.Name + "<br/>" + newStudent.StudentId + "<br/>" + newStudent.age.ToString()); #endregion }
결과 보기:
눈치채셨는지 모르겠지만 예전에는 직렬화할 수 있는 모든 객체에는 [직렬화 가능] 기능이 있어야 했습니다. , 그런데 학생 수업에서 확인해봤는데, 왜 직접 작성하고 실행해 보면 무슨 일이 일어나는지 바이두대학교에 문의해 보세요. 게으른 아이들은 포스터가 기분이 좋아질 때까지 기다렸다가 블로그를 업데이트하면 됩니다. 또한, 이 예에서는 간단한 유형만 연재되며, 포스터는 기분에 따라 블로그를 업데이트하지 않습니다.
위 내용은 .Net의 내용입니다. DataContractJsonSerializer를 사용하여 기본 직렬화 및 역직렬화 작업을 수행하는 경우에는 PHP를 참조하세요. 중국사이트(m.sbmmt.com)!