Heim  >  Artikel  >  Backend-Entwicklung  >  .Net – Verwenden Sie DataContractJsonSerializer für grundlegende Serialisierungs- und Deserialisierungsvorgänge

.Net – Verwenden Sie DataContractJsonSerializer für grundlegende Serialisierungs- und Deserialisierungsvorgänge

黄舟
黄舟Original
2017-02-24 10:38:091421Durchsuche

Im täglichen Leben verwenden wir oft den Prozess, ein D-Typ-Ding in Json zu serialisieren und dann die gebundenen Daten an die Seite zurückzugeben. In jedem Interview werde ich wahrscheinlich gefragt, wie man serialisiert? Die Antwort ist immer unten verpackt. Vergessen Sie es. Machen wir zum Spaß eine einfache Kastanie, um den Mund des Interviewers zu blockieren.

Beim Serialisieren und Deserialisieren wird hauptsächlich das Objekt DataContractJsonSerializer verwendet und dann mit MemoryStream kombiniert, was in Ordnung ist.

Beginnen wir ohne weitere Umschweife mit einer einfachen + generischen Kastanie, und dann werden wir sie nach und nach verbessern:

  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;
            }
           
        }
    }

Dann schreiben wir eine Klasse zum Testen:

//[Serializable]
   public  class Student
    {
       public string StudentId { get; set; }
       public string Name { get; set; }
       public int age { get; set; }
       public string Address { get; set; }
    }

Testcode:

  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

        }

Sehen Sie sich die Ergebnisse an:


Ich weiß nicht, ob Sie es bemerkt haben, aber in der Vergangenheit mussten alle Objekte, die wir serialisieren konnten, dies tun Diese Funktion muss mit [Serialisierbar] gekennzeichnet sein, aber ich habe sie in der Studentenklasse ausprobiert. Schreiben Sie sie selbst und führen Sie sie aus, um zu sehen, was passiert. Der Grund wird nicht erklärt. Faule Kinder können warten, bis der Poster besser gelaunt ist, und den Blog aktualisieren. Außerdem werden in diesem Beispiel nur einfache Typen serialisiert und komplexe Situationen werden nicht berücksichtigt. Der Poster aktualisiert den Blog entsprechend seiner Stimmung.

Das Obige ist der Inhalt von .Net – Verwendung von DataContractJsonSerializer für grundlegende Serialisierungs- und Deserialisierungsvorgänge. Weitere verwandte Inhalte finden Sie in PHP Chinesische Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn