>  기사  >  백엔드 개발  >  .Net - 기본 직렬화 및 역직렬화 작업에 DataContractJsonSerializer 사용

.Net - 기본 직렬화 및 역직렬화 작업에 DataContractJsonSerializer 사용

黄舟
黄舟원래의
2017-02-24 10:38:091375검색

일상생활에서 우리는 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를 참조하세요. 중국사이트(www.php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.