.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 

你可能感兴趣的:(.net)