使用DataContractJsonSerializer類
 

要加入參考

沒加入參考會有語法無法正常使用

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

接下來建立一個Class
 

 [DataContract]
   public class Student
    {
        [DataMember]
       public int ID { get; set; }

        [DataMember]
       public string Name { get; set; }

        [DataMember]
       public int Age { get; set; }

        [DataMember]
       public string Sex { get; set; }
    }

其中Student實體中的契約 [DataMember],[DataContract]

是使用DataContractJsonSerializer序列化和反序列化必須要加的

 

 

序列化的方式

DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Student));
MemoryStream msObj = new MemoryStream();
//將序列化之後的Json格式資料寫入流中
js.WriteObject(msObj, stu);
msObj.Position = 0;
//從0這個位置開始讀取流中的資料
StreamReader sr = new StreamReader(msObj, Encoding.UTF8);
string json = sr.ReadToEnd();
sr.Close();
msObj.Close();
Console.WriteLine(json);

 

反序列化的方式

string toDes = json;
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(toDes)))
{
    DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Student));
    Student model = (Student)deseralizer.ReadObject(ms);// //反序列化ReadObject
    Console.WriteLine("ID=" + model.ID);
    Console.WriteLine("Name=" + model.Name);
    Console.WriteLine("Age=" + model.Age);
    Console.WriteLine("Sex=" + model.Sex);
}

 

完整的程式碼

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

namespace ConsoleTest2
{
    [DataContract]
    public class Student
    {
        [DataMember]
        public int ID { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public int Age { get; set; }

        [DataMember]
        public string Sex { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student()
            {
                ID = 1,
                Name = "曹操",
                Sex = "男",
                Age = 1000
            };
            //序列化
            DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Student));
            MemoryStream msObj = new MemoryStream();
            //將序列化之後的Json格式資料寫入流中
            js.WriteObject(msObj, stu);
            msObj.Position = 0;
            //從0這個位置開始讀取流中的資料
            StreamReader sr = new StreamReader(msObj, Encoding.UTF8);
            string json = sr.ReadToEnd();
            sr.Close();
            msObj.Close();
            Console.WriteLine(json);

            //反序列化
            string toDes = json;
            using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(toDes)))
            {
                DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Student));
                Student model = (Student)deseralizer.ReadObject(ms);// //反序列化ReadObject
                Console.WriteLine("ID=" + model.ID);
                Console.WriteLine("Name=" + model.Name);
                Console.WriteLine("Age=" + model.Age);
                Console.WriteLine("Sex=" + model.Sex);
            }
            Console.ReadKey();
        }
    }
}

 

==========================

序列化和反序列化

序列化是將物件狀態轉換為可保存或可傳輸格式的處理序

序列化的反面是還原序列化,它可以將資料流轉換成物件。將這兩種處理序搭配使用,可使資料易於儲存和傳輸。

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 王瘇子 的頭像
    王瘇子

    王瘇子C# 學習倉庫

    王瘇子 發表在 痞客邦 留言(0) 人氣()