DataContractJsonSerializer 轉換 IDictionary 介面

轉換IDictionary介面的方式也一樣,只要注意初始化DataContractJsonSerializer類別時傳入IDictionary介面就好
但是輸出的結果並不如預期中為物件的格式
直接宣告一個Dictionary來當範例
// 淮備序列化的類別資料
Dictionary<int, object> dataList = new Dictionary<int, object>()
{
{1, “a”},
{2, “b”},
{3, “c”}
};

初始化時要傳入這個Dictionary的型別
// 初始化DataContractJsonSerializer類別
DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(Dictionary<int, object>));
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)))
{
Dictionary<int, object> data2List = dcjs.ReadObject(ms) as Dictionary<int, object>;
foreach (KeyValuePair<int, object> item in data2List)
{
Console.WriteLine(
“Key:{0}, Value:{1}”,
item.Key,
item.Value);
}
}

執行結果可以看到序列化成JSON字串時,會固定變成Key:xx, Value:oo的陣列
這在不同JSON元件之間的轉換會造成一些問題