前篇介紹了使用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;
}
結果
這邊使用一樣的範例
這邊會看到開啟檔案後的顯示方式為Json格式
非常容易的,幾乎不需修改任何地方,只要換掉序列化的類別即可!!
DataContractJsonSerializer_WP7.zip
DataContractJsonSerializer-WP8.zip
參考資料
DataContractJsonSerializer Class
Windows Phone 7 Serialization: DataContract Serialization
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝