DataContractJsonSerializer 轉換 IEnumerable 介面

轉換IEnumerable的用法和一般的資料沒什麼不同
差別只在於初始化類別的時後,傳入的資料型別也要改成IEnumerable
宣告一個相同的資料型別來做範例
[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; }
}

準備一個List來當做序列化的資料
初始化DataContractJsonSerializer類別的時後,也要傳入這個List的型別
// 淮備序列化的類別資料
List<JsonData> dataList = new List<JsonData>()
{
new JsonData()
{
Id = 1,
Name = “data1”,
Today = DateTime.Now.AddDays(-1),
IsBool = true,
UnlessField = “沒用到的欄位1”
},
new JsonData()
{
Id = 2,
Name = “data2”,
Today = DateTime.Now,
IsBool = false,
UnlessField = “沒用到的欄位2”
},
new JsonData()
{
Id = 3,
Name = “data3”,
Today = DateTime.Now.AddDays(1),
IsBool = true,
UnlessField = “沒用到的欄位3”
}

};

// 初始化DataContractJsonSerializer類別
DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(List<JsonData>));
string jsonString = string.Empty;

序列化的方法一樣
// 序列化資料
using (MemoryStream ms = new MemoryStream())
{
dcjs.WriteObject(ms, dataList);
jsonString = Encoding.UTF8.GetString(ms.ToArray());
Console.WriteLine(jsonString);
Console.WriteLine();
}

反序列化的方法也一樣
// 反序列化資料
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
List<JsonData> data2List = dcjs.ReadObject(ms) as List<JsonData>;
foreach (JsonData item in data2List)
{
Console.WriteLine(
“Id:{0}, Name:{1}, Today:{2}, IsBool:{3}, UnlessField:{4}”,
item.Id,
item.Name,
item.Today,
item.IsBool,
item.UnlessField);
}
}

執行結果資料一樣序列化成陣列的樣子,反序列化也沒什麼問題