zoukankan      html  css  js  c++  java
  • .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 

  • 相关阅读:
    Docker的历史
    IP路由基础
    Docker的基础知识(二)
    Docker的基础知识(一)
    CentOS7下安装部署“zabbix”
    使用amoeba实现mysql读写分离
    ?? 运算符(C# 参考)
    ?? 运算符(C# 参考)
    knockout,change事件
    knockout,change事件
  • 原文地址:https://www.cnblogs.com/alala666888/p/1989965.html
Copyright © 2011-2022 走看看