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

转自:http://www.cnblogs.com/YUTOUYUWEI/p/5585863.html

在开发过程中,有时候需要将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 == 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 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(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);}}
复制代码

输出结果:

转载于:https://www.cnblogs.com/Joetao/articles/5851502.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS高级——对象的原型__proto__、函数的原型prototype、构造函数

一、认识构造函数 我们先理解什么是构造函数&#xff1f; 构造函数也称之为构造器&#xff08;constructor&#xff09;&#xff0c;通常是我们在创建对象时会调用的函数&#xff1b;在其他面向的编程语言里面&#xff0c;构造函数是存在于类中的一个方法&#xff0c;称之为构造…

JS面向对象——原型链、通过原型链实现继承、借用构造函数实现继承

一、JavaScript原型链 在真正实现继承之前&#xff0c;我们先来理解一个非常重要的概念&#xff1a;原型链。 我们知道&#xff0c;从一个对象上获取属性&#xff0c;如果在当前对象中没有获取到就会去它的原型&#xff08;__proto__&#xff09;上面获取&#xff1a; 二、…

JS面向对象——原型式继承函数、寄生式继承函数、寄生组合式继承

一、原型式继承函数 回顾一下JavaScript想实现继承的目的&#xff1a;重复利用另外一个对象的属性和方法. 最终的目的&#xff1a;student对象的原型指向了person对象&#xff1b; 二、寄生式继承函数 寄生式(Parasitic)继承是与原型式继承紧密相关的一种思想, 并且同样由道格…

JS面向对象——Object对象的方法补充、原型继承关系图

一、Object.create() 这个方法用于创建一个新对象。被创建的对象的__proto__指向create函数第一个参数的原型对象prototype&#xff0c;在创建新对象时可以通过create函数第二个参数指定一些属性。 二、Object.hasOwnProperty() 对象是否有某一个属于自己的属性&#xff08…

JS面向对象——class定义类、类的构造函数、实例方法、访问器方法、静态方法、继承、super、多态

一、认识class定义类 我们会发现&#xff0c;按照前面的构造函数形式创建 类&#xff0c;不仅仅和编写普通的函数过于相似&#xff0c;而且代码并不容易理解。 在ES6&#xff08;ECMAScript2015&#xff09;新的标准中使用了class关键字来直接定义类&#xff1b;但是类本质上依…

ES6(一)——字面量的增强、解构、let/const、块级作用域、暂时性死区

一、字面量的增强 ES6中对 对象字面量 进行了增强&#xff0c;称之为 Enhanced object literals&#xff08;增强对象字面量&#xff09;。 字面量的增强主要包括下面几部分&#xff1a; 属性的简写&#xff1a;Property Shorthand方法的简写&#xff1a;Method Shorthand计算…

MapReduce算法形式四:mapjoin

案例四&#xff1a;mapjoin&#xff08;对个map共同输入&#xff0c;一个reduce&#xff09; 这个方法主要解决的是&#xff0c;几个表之间的比较&#xff0c;类似于数据库的内外连接&#xff0c;还有一些左右连接之类的&#xff0c;简而言之就是&#xff0c;A表没有的B表有&am…

ES6(二)——字符串模板、标签模板字符串、函数的默认参数、剩余参数、数组对象的展开语法、数值的表示、Symbol

一、字符串模板基本使用 在ES6之前&#xff0c;如果我们想要将字符串和一些动态的变量&#xff08;标识符&#xff09;拼接到一起&#xff0c;是非常麻烦和丑陋的&#xff08;ugly&#xff09;。 ES6允许我们使用字符串模板来嵌入JS的变量或者表达式来进行拼接&#xff1a; 首…

ES6(三)——Set、WeakSet、Map、WeakMap

一、Set的基本使用 在ES6之前&#xff0c;我们存储数据的结构主要有两种&#xff1a;数组、对象。 在ES6中新增了另外两种数据结构&#xff1a;Set、Map&#xff0c;以及它们的另外形式WeakSet、WeakMap。 Set是一个新增的数据结构&#xff0c;可以用来保存数据&#xff0c;类…

ES6~ES12——Array Includes、Object values、Object entries、Object fromEntries、flat、flatMap、空值合并运算符、可选链等

一、ES7 - Array Includes 在ES7之前&#xff0c;如果我们想判断一个数组中是否包含某个元素&#xff0c;需要通过 indexOf 获取结果&#xff0c;并且判断是否为 -1。 在ES7中&#xff0c;我们可以通过includes来判断一个数组中是否包含一个指定的元素&#xff0c;根据情况&…

移除通知的时机

链接 结论 最好是在不需要的时候就移除掉。 如果不是特别苛刻&#xff0c;可以直接在dealloc函数里写。因为dealloc函数一定会被调用的。 在dealloc函数中移除的可能问题 由于dealloc在Runloop结束时会被调用。如果在Runloop调用之前&#xff0c;又有一个通知到来&#xff0c;会…

JS高级——Proxy、Reflect

一、监听对象的操作 我们先来看一个需求&#xff1a;有一个对象&#xff0c;我们希望监听这个对象中的属性被设置或获取的过程 通过我们前面所学的知识&#xff0c;能不能做到这一点呢&#xff1f;其实是可以的&#xff0c;我们可以通过之前的属性描述符中的存储属性描述符来…

Promise学习笔记

一、异步任务的处理 这里我从一个实际的例子来作为切入点&#xff1a; 我们调用一个函数&#xff0c;这个函数中发送网络请求&#xff08;我们可以用定时器来模拟&#xff09;&#xff1b;如果发送网络请求成功了&#xff0c;那么告知调用者发送成功&#xff0c;并且将相关数…

JS高级——Iterator迭代器、Generator生成器

一、什么是迭代器&#xff1f; 在JavaScript中&#xff0c;迭代器也是一个具体的对象&#xff0c;这个对象需要符合迭代器协议&#xff08;iterator protocol&#xff09;&#xff1a; 迭代器协议定义了产生一系列值&#xff08;无论是有限还是无限个&#xff09;的标准方式&…

删除一行下方单元格上移_快速删除Excel工作表多余空单元格

从其他地方复制了数据&#xff0c;有时候会出现多余的空单元格。手动删除很麻烦&#xff0c;就像下面的图中的工作表区域。下面介绍一种方法&#xff0c;可以快速删除多余空单元格。1.选中目标区域&#xff0c;在这里就选中A1:A9的单元格区域。2.按键盘上的F5或者CtrlG。3.点击…

JS高级——await-async

一、异步函数 async function async关键字用于声明一个异步函数&#xff1a; async是asynchronous单词的缩写&#xff0c;异步、非同步&#xff1b;sync是synchronous单词的缩写&#xff0c;同步、同时&#xff1b; async异步函数可以有很多中写法&#xff1a; 二、异步函…

图象关于y轴对称是什么意思_数学概念丨“图象”与“图像”是有区别的 ,你知道吗?...

你与数学间只差一个公众号解读教材教法&#xff0c;研究解题策略&#xff0c;传播数学文化&#xff0c;推广数学应用&#xff0c;推送知识干货&#xff0c;分享学习方法。精彩分享初一数学全国各地期中试卷150套&#xff0c;word版初二数学全国各地期中试卷150套&#xff0c;wo…

数据压缩 第二次作业

1.设X是一个随机变量&#xff0c;取值范围是一个包含M个字母的符号集。证明0<H(X)<log2M。 2.证明如果观察到一个序列的元素为iid分布&#xff0c;则该序列的熵等于一阶熵。 3.给定符号集A{a1,a2,a3,a4},求以下条件下的一阶熵&#xff1a; (a) p(a1)p(a2)p(a3)p(a4)1/4 (…

JS高级——错误处理

一、错误处理方案 开发中我们会封装一些工具函数&#xff0c;封装之后给别人使用&#xff1a; 在其他人使用的过程中&#xff0c;可能会传递一些参数&#xff1b;对于函数来说&#xff0c;需要对这些参数进行验证&#xff0c;否则可能得到的是我们不想要的结果&#xff1b; …

k1658停运到什么时候_春节网购别被商家忽悠!春节快递不停运,但价格会和平时不一样...

现在临春节已经越来越近了&#xff0c;这些天也是网购订单大幅度增长的时间&#xff0c;因为年底的时候很多人的网购需求都爆发了&#xff0c;会想着买各种东西到家&#xff0c;包括年货的置办。也就是在这种时候&#xff0c;很多网店过年的时候都会休息&#xff0c;但是也有一…