DataContractJsonSerializer 轉換 IDictionary 介面

Jun 20, 2013

2 mins read

轉換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元件之間的轉換會造成一些問題
[![](http://1.bp.blogspot.com/-Et1ueQR5Ln0/UcKzdBLQPvI/AAAAAAAAAwA/lxpN84Etqmk/s1600/04-3.png)](http://1.bp.blogspot.com/-Et1ueQR5Ln0/UcKzdBLQPvI/AAAAAAAAAwA/lxpN84Etqmk/s1600/04-3.png)

Sharing is caring!