首先需要先定義資料類別
DataContract用來標記類別
DataMember用來標記屬性,Name可以用來變更序列化後的名稱,Order則是序列化的順序
IgnoreDataMember用來標記屬性,表示不參與序列化過程
DataContract用來標記類別
DataMember用來標記屬性,Name可以用來變更序列化後的名稱,Order則是序列化的順序
IgnoreDataMember用來標記屬性,表示不參與序列化過程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| [DataContract]public class JsonData{ [DataMember(Name = "ID", Order = 0)] public int Id { get; set; } [DataMember(Order = 1)] public string Name { get; set; } [DataMember(Order = 2)] public DateTime Today { get; set; } [DataMember(Order=3)] public bool IsBool { get; set; } [IgnoreDataMember()] public string UnlessField { get; set; }} |
初始化DataContractJsonSerializer類別時,需傳入要序列化的資料型別
1
2
3
4
5
6
7
8
9
10
11
12
13
| // 淮備序列化的類別資料JsonData d1 = new JsonData(){ Id = 1, Name = "data", Today = DateTime.Now, IsBool = true, UnlessField = "沒用到的欄位"};// 初始化DataContractJsonSerializer類別DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(JsonData));string jsonString = string.Empty; |
序列化資料使用WriteObject寫入Stream
再用Encoding取得json字串
再用Encoding取得json字串
1
2
3
4
5
6
7
| // 序列化資料using (MemoryStream ms = new MemoryStream()){ dcjs.WriteObject(ms, d1); jsonString = Encoding.UTF8.GetString(ms.ToArray()); Console.WriteLine(jsonString);} |
反序列化資料先用Encoding取得取得Byte Array讀入Stream
再用ReadObject讀出資料型別
再用ReadObject讀出資料型別
1
2
3
4
5
6
7
8
9
10
11
12
| // 反序列化資料using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))){ JsonData d2 = dcjs.ReadObject(ms) as JsonData; Console.WriteLine( "Id:{0}, Name:{1}, Today:{2}, IsBool:{3}, UnlessField:{4}", d2.Id, d2.Name, d2.Today, d2.IsBool, d2.UnlessField);} |

沒有留言:
張貼留言