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串的更多相关文章

  1. java拼接JSON串

    String str = "{\"route\":\"onGift\",\"time\":\"\",\&quo ...

  2. @RequestBody与serialize()、serializeArray()、拼接Json 妙用总结

    @requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容, 比如说:application/json或者是app ...

  3. json 串转成 java 对象再拼接成前台 html 元素

    获取商品参数 json 串,转成 java 对象,再拼接成前台 html 的Service方法 @Override public String getItemParam(Long itemId) { ...

  4. 如何用js定义数组,用js来拼接json字段

    定义js数组的方式有: var arr = (); var arr = []; var arr = new Array(); 如何拼接成一个json字段. <!DOCTYPE HTML PUBL ...

  5. mysql - json串新增字段

    1.建表 -- 建表 drop table if exists ta_product2; CREATE TABLE ta_product2( id int primary key auto_incre ...

  6. HiJson工具 && 火狐浏览器中的jsonHandle插件(以及乱码问题的解决)-->来转换json串的格式

    原文:http://blog.csdn.net/cjm2484836553/article/details/72453907 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] ...

  7. Json串排序

    最近遇到个很烦人的问题.我现在做的业务有一部分是把之前app服务端的.net接口转译java接口.但是有些之前的接口,一个接口干上十几件事情,返回的json串长达五六几百行.着实看的就让人头大.但是如 ...

  8. Json串与实体的相互转换 (不依赖于jar包 只需Eclipse环境即可)

    Json串与实体的相互转换 (不依赖于jar包 只需Eclipse环境即可) 最近学习了javaWeb开发,用的是ssh框架里面自己整合了hibernate 和Struts2 和spring框架,其中 ...

  9. Java开发笔记(一百零八)JSON串的定义和解析

    前面提到URL尾巴支持添加请求参数,具体格式形如“参数A名称=A参数值&参数B名称=B参数值”,可是这种格式只能传递简单的键值对信息,不能传递结构化数据,也无法传递数组形式的参数,因而它不适用 ...

随机推荐

  1. 释放Android的函数式能量(I):Kotlin语言的Lambda表达式

    原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...

  2. centos直接yum安装nginx

    Ubuntu下安装nginx,直接apt-get install nginx就行了,很方便. 但是今天装了CentOS6.2,直接yum install nginx不行,要先处理下源,下面是安装完整流 ...

  3. Android开发案例 - 注册登录

    本文只涉及UI方面的内容, 如果您是希望了解非UI方面的访客, 请跳过此文. 在微博, 微信等App的注册登录过程中有这样的交互场景(如下图): 打开登录界面 在登录界面中, 点击注册, 跳转到注册界 ...

  4. c++宏定义命令

    在程序开始以#开头的命令,他们是预编译命令.有三类预编译命令:宏定义命令.文件包含命令.条件编译命令:今天聊聊宏定义: 宏定义命令将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替 ...

  5. java实现敏感词过滤(DFA算法)

    小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxo ...

  6. 在WINDOWS下初步试用OMNET++ 4

    闲扯: 最近实习公司要做ZIGBEE,我是对这个兴趣不大,但工作还是要做的,目前帮着找找合适的仿真软件,什么NS-2啊,OPNET啊. 正文: 这个软件软件直接去官网下载就好了,免费开源. 安装也比较 ...

  7. spring HttpInvoker相关学习资料

    官方文档 spring支持的几种RPC 用Http Invoker实现RCP客户端与后台的交互 Java HttpInvoker小试 Spring注解发布RMI/HTTPInvoker/Hessian ...

  8. SCNU 2015ACM新生赛决赛【F. Oyk闯机关】解题报告

            题目大意:一个$N$$\times$$N$的阵列,每个格子有$X_{ij}$个调和之音,若每次只能选择走右边或下边,从左上角出发走到右下角,问最多能收集到多少个调和之音?       ...

  9. Java动态代理

    代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关 ...

  10. js禁止页面刷新禁止用F5键刷新,禁止右键

    <script     language="javascript"> //禁止用F5键 function     document.onkeydown() { if   ...