json字符串和字典类型的相互转换

在开发过程中,有时候需要将json字符串转为字典类型,反之亦然,通常采用.Net的开源类库Newtonsoft.Json进行序列化,这里我也是采用这个,不过我更喜欢写扩展方法方便在项目的调用。

首先新建一个扩展类JsonExtensions(类名自己按照自己喜好定义):

 public static class JsonExtensions
    {
        /// <summary>
        /// 将字典类型序列化为json字符串
        /// </summary>
        /// <typeparam name="TKey">字典key</typeparam>
        /// <typeparam name="TValue">字典value</typeparam>
        /// <param name="dict">要序列化的字典数据</param>
        /// <returns>json字符串</returns>
        public static string SerializeDictionaryToJsonString<TKey, TValue>(IDictionary<TKey, TValue> dict)
        {
            if (dict.Count == 0)
                return "";

            string jsonStr = JsonConvert.SerializeObject(dict);
            return jsonStr;
        }

        /// <summary>
        /// 将json字符串反序列化为字典类型
        /// </summary>
        /// <typeparam name="TKey">字典key</typeparam>
        /// <typeparam name="TValue">字典value</typeparam>
        /// <param name="jsonStr">json字符串</param>
        /// <returns>字典数据</returns>
        public static IDictionary<TKey, TValue> DeserializeStringToDictionary<TKey, TValue>(string jsonStr)
        {
            if (string.IsNullOrEmpty(jsonStr))
                return new Dictionary<TKey, TValue>();

            Dictionary<TKey, TValue> jsonDict = JsonConvert.DeserializeObject<Dictionary<TKey, TValue>>(jsonStr);

            return jsonDict;

        }
    }

 接下来就调用这两个扩展方法,看看是否可行,这里我写的是一个单元测试,方便用于测试,写的一般,大家可以自行回去测试:

[TestClass] public class DictionaryTest
    {
        [TestMethod]
        public void Can_Serialize_Deserialize()
        {
            Dictionary<string, string> paramDictionary = new Dictionary<string, string>();

            paramDictionary.Add("one", "productName");
            paramDictionary.Add("two", "productColor");
            paramDictionary.Add("three", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            paramDictionary.Add("four", DateTime.Now.AddDays(5).ToString("yyyy-MM-dd HH:mm:ss"));

            string jsonStr = JsonExtensions.SerializeDictionaryToJsonString<string, string>(paramDictionary);

            var jsonDict = JsonExtensions.DeserializeStringToDictionary<string, string>(jsonStr);

            List<string> dict1 = new List<string>();
            foreach (var item in paramDictionary)
            {
                dict1.Add(paramDictionary[item.Key]);
            }

            List<string> dict2 = new List<string>();
            foreach (var item in jsonDict)
            {
                dict2.Add(jsonDict[item.Key]);
            }

            int intersect = dict1.Intersect(dict2).Count(); // 交集
            int except = dict1.Except(dict2).Count(); // 差集
            int union = dict1.Union(dict2).Count(); // 并集

            Assert.AreEqual(4, intersect);
            Assert.AreEqual(0, except);
            Assert.AreEqual(4, union);
            Assert.AreEqual("productName", dict2[0]);
            Assert.AreEqual("productColor", dict2[1]);
            Assert.AreEqual(4, dict2.Count);
        }
    }

输出结果:

-- 鱼头鱼尾

QQ:875755898

时间: 2024-10-02 02:47:14

json字符串和字典类型的相互转换的相关文章

python字典转化成json格式。JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换

遇到问题:进行Webservice接口测试时,对接口入参数据进行了处理,变成了dict格式,去进行接口请求报错. 需要转成成json格式,双引号去扩. 如下: 更改代码: # 在Python标准库的json包中,提供了JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换. from json import * if __name__=="__main__": d={} d['a'] =1 d['b']=2 d[3]='c' d[4]=['

速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换

[源码下载] 作者:webabcd 介绍速战速决 之 PHP 获取 http 请求数据 获取 get 数据 和 post 数据 json 字符串与对象之间的相互转换 示例1.获取 http 请求数据http/http1.php <?php /** * 获取 http 请求数据 */ // 通过 $_SERVER 获取相关数据 echo "PHP_SELF : " . $_SERVER['PHP_SELF'] . "<br />"; echo &qu

json字符串与java对象的相互转换(jackson)

1.java对象转换为json字符串 package com.chichung.json; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class JavaToJson { public static void main(String[] args) throws JsonProcessingExcepti

如何实现@ResponseBody,把Json字符串转换为指定类型

1.问题 spring 是如何把 http中的body,转换为指定类的,里面的难点其实在于泛型的处理. 2.Spring的处理 2.1 HandlerMethod 这个类Spring对Method的封装,例如使用@RequestMapping注解方法,会使用HandlerMethod封装(其实是其子类InvocableHandlerMethod).然后由InvocableHandlerMethod对其进行调用 HandlerMethod的属性如下 private final Object bea

Swift3 JSON字符串转字典和字典转JSON字符串的实现

直接上代码吧 1.JSONString转换为字典 /// JSONString转换为字典 /// /// - Parameter jsonString: <#jsonString description#> /// - Returns: <#return value description#> func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{ let jsonData:Data = json

Swift JSON字符串和字典以及数组的互转

1.JSONString转换为字典 // JSONString转换为字典 func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{ let jsonData:Data = jsonString.data(using: .utf8)! let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) if d

C#json转换成字典类型

string ProductDetails = "{\"size\":\"10\", \"weight\":\"10kg\"}"; Dictionary<string, string> ProductDetailList= JsonConvert.DeserializeObject<Dictionary<string, string>>(ProductDetails);

Json-lib 进行java与json字符串转换之二

二.list和json字符串的互转 list-->>json字符串 public static void listToJSON(){ Student stu=new Student(); stu.setName("JSON"); stu.setAge("23"); stu.setAddress("北京市海淀区"); List<Student> lists=new ArrayList<Student>(); li

【Android进阶】Gson解析json字符串的简单应用

在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式,如果使用SAX解析方式,则可以一边加载一边解析,对于数据量比较大的应用,比较适合.今天主要整理一下使用Gson解析json格式字符串的简单使用. 首先,必须导入外部包 /** * * @author ZhaoKaiQiang * * @time 2014年5月4日 */ public class J