ホームページ >バックエンド開発 >C#.Net チュートリアル >.Net - 基本的なシリアル化および逆シリアル化操作に DataContractJsonSerializer を使用する
日常生活では、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) に注目してください。