[Windwos Phone]使用序列化(Serialize)做IsolatedStorage檔案儲存與讀取-使用資料合約(DataContract)Json格式

前篇介紹了使用DataContract資料合約與DataContractSerializer來序列化資料為XML格式,而在這邊我們介紹如何使用DataContract來做Json個序列化

前言

 


 

前篇介紹了使用DataContract資料合約與DataContractSerializer來序列化資料為XML格式,而在這邊我們介紹如何使用DataContract來做Json序列化

 

建立資料合約到資料類別

 


 

一樣建立你要序列化的資料類別與標記DataContract與DataMember,這邊還是用Student為例子

[DataContract]
    public class Student {

        public Student(int id, string name, bool isGraduated) {
            ID = id;
            Name = name;
            Graduated = isGraduated;
        }

        [DataMember(Name="StudentID")]
        public int ID { get; set; }
        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public bool Graduated;

    }
 

Json序列化

 



再來,我們要增加一個Include
using System.Runtime.Serialization.Json;

這邊要稍微注意一下,如果是Windows Phone 7需要參考System.ServiceModel.Web,using System.Runtime.Serialization.Json 才會有效

 

此時便會出現可以用來做Json序列化的類別,讓我們把DataContractSerializer換成DataContractJsonSerializer

 
string fileName;
IsolatedStorageFile recordFile;
string recordTargetFolderName;
DataContractJsonSerializer JsonSerializer; //Json Serializer
  // 建構函式
        public MainPage()
        {
            InitializeComponent();
            recordFile = IsolatedStorageFile.GetUserStoreForApplication();
            fileName = "student.txt";
            recordTargetFolderName = "StudentRecord";
            JsonSerializer = new DataContractJsonSerializer(typeof(Student));
        }

 

序列化與反序列與前篇一樣

 

存檔序列化成Json

public void SaveData(Student saveData)
        {
            string TargetFileName = String.Format("{0}\\{1}",
                                             recordTargetFolderName, fileName);

            if (!recordFile.DirectoryExists(recordTargetFolderName))
                recordFile.CreateDirectory(recordTargetFolderName);
            try
            {
                using (var targetFile = recordFile.CreateFile(TargetFileName))
                {
                    JsonSerializer.WriteObject(targetFile, saveData);
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
            }
        }

 

反序列化讀取資料

public Student LoadData()
        {
            Student s = null;
            string TargetFileName = String.Format("{0}\\{1}",
                                              recordTargetFolderName, fileName);
            try
            {
                if (recordFile.FileExists(TargetFileName))
                {
                    using (var sourceStream = recordFile.OpenFile(TargetFileName, FileMode.Open))
                    {
                        s = (Student)JsonSerializer.ReadObject(sourceStream);
                    }
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);

            }
            return s;
        }

 

結果

 


 

這邊使用一樣的範例

wp_ss_20131124_0002  wp_ss_20131124_0003

 

這邊會看到開啟檔案後的顯示方式為Json格式

isolatedStorage_json_file

 

非常容易的,幾乎不需修改任何地方,只要換掉序列化的類別即可!!

DataContractJsonSerializer_WP7.zip

DataContractJsonSerializer-WP8.zip

 

參考資料

DataContractJsonSerializer Class

Windows Phone 7 Serialization: DataContract Serialization

 


 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)

另外要轉載請附上出處 感謝