ホームページ  >  記事  >  バックエンド開発  >  .Net - 基本的なシリアル化および逆シリアル化操作に DataContractJsonSerializer を使用する

.Net - 基本的なシリアル化および逆シリアル化操作に DataContractJsonSerializer を使用する

黄舟
黄舟オリジナル
2017-02-24 10:38:091375ブラウズ

日常生活では、T 型のものを Json にシリアル化し、バインドされたデータをページに返すプロセスをよく使用します。毎回のインタビューでおそらく「どうやって連載するの?」と聞かれると思います。答えは常に最下層にカプセル化されています。それは忘れて、面接官の口を塞ぐために、遊びで簡単な栗を作りましょう。

シリアル化、逆シリアル化する際は主にDataContractJsonSerializerオブジェクトを使用し、MemoryStreamと組み合わせればOKです。

あまり言うことはありません。単純で一般的な栗から始めて、それから徐々に改善していきます:

  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

        }

結果を見てください:


お気づきかどうかわかりませんが、以前はシリアル化できるすべてのオブジェクトは [シリアル化可能] 機能でマークする必要がありました。しかし、学生クラスで確認しましたが、なぜですか? 自分で実行して何が起こるかは説明されていません。Baidu University を参照してください。怠け者は、投稿者の機嫌が良くなるまで待ってブログを更新できます。また、この例では、単純なタイプのみがシリアル化されており、投稿者は気分に応じてブログを更新します。

上記は .Net の内容です - 基本的なシリアル化および逆シリアル化操作に DataContractJsonSerializer を使用する その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。