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>(Dictionary<TKey, TValue> dict)
{
if (dict.Count == )
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 Dictionary<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().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(, intersect);
Assert.AreEqual(, except);
Assert.AreEqual(, union);
Assert.AreEqual("productName", dict2[]);
Assert.AreEqual("productColor", dict2[]);
Assert.AreEqual(, dict2.Count);
}
}
输出结果:

-- 鱼头鱼尾
QQ:875755898
json字符串和字典类型的相互转换的更多相关文章
- JSON字符串和Dictionary字典类型的相互转换
在开发过程中,往往会遇到数据类型转换的情况,根据自己的业务,可能转换类型有多种,下面就说一下json字符串和字典类型的转换. public static class JsonUntity { /// ...
- [Swift]JSON字符串与字典(Dictionary)、数组(Array)之间的相互转换
1.JSON字符串与字典(Dictionary)之间的相互转换 import Foundation //JSON字符串转换为字典(Dictionary) func getDictionaryFromJ ...
- python字典转化成json格式。JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换
遇到问题:进行Webservice接口测试时,对接口入参数据进行了处理,变成了dict格式,去进行接口请求报错. 需要转成成json格式,双引号去扩. 如下: 更改代码: # 在Python标准库的j ...
- json字符串和字典的区别补充
json字符串和字典的区别:json:(JavaScript Object Notation)的首字母缩写,字面的意思是(javascript对象表示法),这里说的json指的是类似于javascri ...
- json字符串和字典的区别
json字符串和字典的区别: json: (JavaScript Object Notation)的首字母缩写,字面的意思是(javascript对象表示法),这里说的json指的是类似于javasc ...
- 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换
[源码下载] 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换 作者:webabcd 介绍速战速决 之 PHP ...
- iOS开发JSON字符串和字典互转
1.相关属性简述 NSJSONReadingOptions读取属性: typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions) { NSJSONRead ...
- 002、Python中json字符串与字典转换
1.测试用例文件TestCase.xlsx 2.编写Python文件进行读取 #!/usr/bin/env python # -*- coding:utf-8 -*- import time impo ...
- Json字符串与字典互转
#pragma mark 转换json字符串 +(NSString *)toJSON:(id)aParam { NSData *jsonData=[NSJSONSerialization data ...
随机推荐
- Java 深拷贝浅拷贝 与 序列化
一.浅拷贝.深拷贝 浅拷贝会对对象中的成员变量进行拷贝:如果是基本类型,拷贝的就是基本类型的值:如果属性是内存地址(引用类型),拷贝的就是内存地址 : 深拷贝,除了基本类型外,引用类型所引用的对象也会 ...
- gitbash使用
gitbash是什么 git bash是Windows下的命令行工具. 基于msys GNU环境,有git分布式版本控制工具. 主要用于git版本控制,上传下载项目代码. GNU环境,就是说如果你喜欢 ...
- react native camera
最近在尝试用react native camera iOS版本很方便就调试通过了,react的试用非常方便 android版本要单独试用fork的 屏蔽了lint的报错后也可以调试通过 参考这篇文章填 ...
- 前端模块化开发的规范:AMD与CDM
AMD, 异步模块定义. CMD,通用模块规范.
- DEDE自定义表单显示提交时间|添加提交时间,获取ip的方法
前提是后台自定义表单字段一定要有 “时间”,这里的acca_time <div class="tit">*咨询内容:</div> <div clas ...
- 解决 git branch -a 无法全部显示远程的分支,只显示master分支
新建分支 若遇到 git branch -a 无法全部显示远程的分支,只显示master分支 可以通过 git fetch 将本地远程跟踪分支进行更新,与远程分支保持一致
- I.MX6 新版u-boot分析
/******************************************************************* * I.MX6 新版u-boot分析 * 说明: * 因为一些 ...
- [yii2]Module的Namespace和控制器位置
namespace和目录对应,否则无法找到控制器类,module文件在根路径 使用gii生成Module为\app\admin,那么 namespace app; class admin extend ...
- this调用属性
示例: class Person{ private String name; private int age; public Person(String name,int age){ this.nam ...
- return break contiune
return 会直接跳出当前作用域,继续执行下面的方法:在js中for循环没有局部作用域的概念,所以如果是多级循环会直接跳出所有的循环: demo for(var i=0; i<10; i++) ...