.Net Json 字典序列化

    这两天正在做一个项目,我的Flex客户端需要和.Net通讯,令人不爽的是.Net的字典(IDictionary)在序列化时都会转化成一个键值对的列表,而不是json最普通的对象。DataContractJsonSerializer会将每一个键值对折腾成{"Key":"age","Value":10},我希望的是"age":10。网上搜了很久,没什么好方法,想到了开源,下了个fastJson来玩,发现也一样,只不过变成了{"K":"age","V":10},还是不爽。最后看了一下源码,把字典序列化相关的类JSONSerializer的WriteDictionary方法改成了下面的样子,总算OK了:

private void WriteDictionary(IDictionary dic)
{
_output.Append(
"{");

bool pendingSeparator = false;

foreach (DictionaryEntry entry in dic)
{
if (pendingSeparator)
_output.Append(
",");
WritePair(entry.Key.ToString(), entry.Value);
pendingSeparator
= true;
}
_output.Append(
"}");
//_output.Append("[");

//bool pendingSeparator = false;

//foreach (DictionaryEntry entry in dic)
//{
// if (pendingSeparator)
// _output.Append(",");

// _output.Append("{");
// WritePair("k",entry.Key);
// _output.Append(",");
// WritePair("v",entry.Value);
// _output.Append("}");


// pendingSeparator = true;
//}

//_output.Append("]");
}

下面是测试代码:

static void Main(string[] args)
{
var dic
= new Dic();
dic[
"no"] = 10;
var subDic
= new Dic();
subDic[
"val"] = 12.3;
dic[
"detail"] = subDic;
var str
= JSON.Instance.ToJSON(dic);
Console.WriteLine(str);
}

public class Lst : ArrayList { }
public class Dic : Hashtable { }

fastJson可以从这边下:
http://www.codeproject.com/KB/IP/fastJSON.aspx 

posted @ 2011-03-21 10:20  李土鳖  阅读(1155)  评论(0编辑  收藏  举报