[原创] C# dynamic拼接Json串
using Newtonsoft.Json;
之前拼接两个json串,是用的这样的代码
var tmp = "," + json1.Substring(, json1.Length - );
json2 = json2.Insert(json2 - , tmp);
虽然效率挺高的,但是代码很丑啊
字符串操作的缺陷:
1)不优雅
2)不通用
3)没有办法替换原有的值
后来想起可以用dynamic类型来实现
如
string json111, json112;
json111 = "{'a':1,'b':2,'d':{}}";
json112 = "{'c':[1,2,3]}";
Console.WriteLine(json111);
Console.WriteLine(json112);
dynamic d111 = JsonConvert.DeserializeObject<object>(json111);
dynamic d112 = JsonConvert.DeserializeObject<object>(json112);
d111["c"] = d112["c"]; string json110 = JsonConvert.SerializeObject(d111 as object);
Console.WriteLine(json110);
原来是用的 d111.c=d112.c,但是这又相当 不通用,而用 d111["c"]=d112["c"];用变量来代替属性显示更通用些
甚至可以拼接二级属性
d111["d"]["d2"] = d112["c"];
这代码显示更优雅些,但是效率肯定不如直接字符串操作了!!
通用代码如下:
/// <summary>
/// 拼接两个Json串,将targetJson插入到sourceJson中
/// 暂时仅支持一级属性
/// </summary>
/// <param name="sourceJson">源Json串</param>
/// <param name="targetJson">插入Json串</param>
/// <param name="propNames">要插入Json的属性列表</param>
/// <returns>拼接好的Json串</returns>
static string ConcatJson(string sourceJson, string targetJson, string[] propNames)
{
dynamic source = JsonConvert.DeserializeObject<object>(sourceJson);
dynamic target = JsonConvert.DeserializeObject<object>(targetJson);
foreach (var prop in propNames)
{
source[prop] = target[prop];
} return JsonConvert.SerializeObject(source as object);
}
调用如下:
string json111, json112;
json111 = "{'a':1,'b':2,'d':{}}";
json112 = "{'c':[1,2,3]}";
Console.WriteLine(json111);
Console.WriteLine(json112);
string json113 = ConcatJson(json111, json112, new string[] {"c"});
Console.WriteLine(json113);
缺陷:
1)需要传插入json的属性列表..还是与调用方有耦合(可以确定,用索引是不行的)
2)效率不高,在不讲究效率的场景用还可以
3)不支持多层插入.
如果哪位大神有更好 的办法,请告知我,谢谢!!!
[原创] C# dynamic拼接Json串的更多相关文章
- java拼接JSON串
String str = "{\"route\":\"onGift\",\"time\":\"\",\&quo ...
- @RequestBody与serialize()、serializeArray()、拼接Json 妙用总结
@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容, 比如说:application/json或者是app ...
- json 串转成 java 对象再拼接成前台 html 元素
获取商品参数 json 串,转成 java 对象,再拼接成前台 html 的Service方法 @Override public String getItemParam(Long itemId) { ...
- 如何用js定义数组,用js来拼接json字段
定义js数组的方式有: var arr = (); var arr = []; var arr = new Array(); 如何拼接成一个json字段. <!DOCTYPE HTML PUBL ...
- mysql - json串新增字段
1.建表 -- 建表 drop table if exists ta_product2; CREATE TABLE ta_product2( id int primary key auto_incre ...
- HiJson工具 && 火狐浏览器中的jsonHandle插件(以及乱码问题的解决)-->来转换json串的格式
原文:http://blog.csdn.net/cjm2484836553/article/details/72453907 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] ...
- Json串排序
最近遇到个很烦人的问题.我现在做的业务有一部分是把之前app服务端的.net接口转译java接口.但是有些之前的接口,一个接口干上十几件事情,返回的json串长达五六几百行.着实看的就让人头大.但是如 ...
- Json串与实体的相互转换 (不依赖于jar包 只需Eclipse环境即可)
Json串与实体的相互转换 (不依赖于jar包 只需Eclipse环境即可) 最近学习了javaWeb开发,用的是ssh框架里面自己整合了hibernate 和Struts2 和spring框架,其中 ...
- Java开发笔记(一百零八)JSON串的定义和解析
前面提到URL尾巴支持添加请求参数,具体格式形如“参数A名称=A参数值&参数B名称=B参数值”,可是这种格式只能传递简单的键值对信息,不能传递结构化数据,也无法传递数组形式的参数,因而它不适用 ...
随机推荐
- CentOS下安装使用start-stop-daemon
CentOS下安装使用start-stop-daemon 在centos下下了个自启动的服务器脚本 执行的时候发现找不到start-stop-daemon命令 好吧 执行手动编译一下 加上这个命令 w ...
- Linux下的SVN服务器搭建
Linux下的SVN服务器搭建 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总 ...
- oracle触发器
类型 行级触发器: FOR EACH ROW 影响的每一行都会执行触发器 语句级出发器 默认的模式,一句话才执行一次触发器 触发器不能嵌套,不能含有事务控制语句 何时触发 Before:条件运行前 A ...
- redis.conf配置详细解析
# redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 bytes # 1kb ...
- 安装centos后无法引导启动windows7的解决方法
在电脑Windows7系统上安装Centos7,安装后找不到Windows7引导菜单. 原因:因为CentOS 7已采用新式的grub2系统,所以需要进入/boot/grub2目录后使用vi编辑gru ...
- 程序设计模式浅析(plain framework商业版设计模式)
程序设计其实对程序开发者来说十分重要,但是在工作中往往我们却忽略了这一块,因为我们所用的都是现有的模式.一个设计模式的好坏,往往能够体现出程序的专业性,还有整个项目的可持续性.这就是为什么有些公司,在 ...
- 前端自动化测试 —— TDD环境配置(React+TypeScript)
欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...
- ImportError: cannot import name '_imagingtk'
问题描述 使用tkinter画pillow生成的图片时,在tkinter中抛出此异常. 解决方案 pip install -I --no-cache-dir Pillow 更新pillow 重启解决一 ...
- 分分钟搞定IOS远程消息推送
一.引言 IOS中消息的推送有两种方式,分别是本地推送和远程推送,本地推送在http://my.oschina.net/u/2340880/blog/405491这篇博客中有详细的介绍,这里主要讨论远 ...
- Apache问题处理服务器访问不了
1. 查看apache的错误日志 我的apache日志文件目录 /var/log/httpd/error.log [Sun Nov 20 21:17:24 2016] [error] server r ...