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. 将语音搜索集成到Google Now中

    原文标题:Use Voice Search to integrate with Google Now 原文链接:http://antonioleiva.com/voice_search_google_ ...

  2. Visual Studio 生成事件命令

    Visual Studio在生成项目工程前后,有时我们需要做一些特殊的操作,比如:拷贝生成的dll到指定目标下面等. 结合VS可以添加预先生成事件和后期生成事件,采用命令或bat批处理. 1.Visu ...

  3. json的理解及读取

    一: JSON 语法是 JavaScript 对象表示语法的子集,其语法规则如下: 数据在键值对中 数据由逗号分隔 花括号保存对象:{} 方括号保存数组:[] 如:[{"name" ...

  4. 烂泥:利用awstats分析nginx日志

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 昨天把nginx的日志进行了切割,关于如何切割nginx日志,可以查看<烂泥:切割 ...

  5. 【译】什么是 web 框架?

    Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式.从简单的博客系统到复杂的富 AJAX 应用,web 上每个页面都是通过写代码来生成的.我发现很多人都热衷于学习 w ...

  6. fopen函数和fread函数、fwrite函数

    fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const ...

  7. ORA-00054: resource busy and acquire with NOWAIT specified

    删除表时遇到 ORA-00054:资源正忙,要求指定NOWAIT 错误.以前在灾备中心遇到过. 资源被锁定了,没有办法删除. 报错日志:ORA-00054: resource busy and acq ...

  8. 继承AppCompatActivity的Activity隐藏标题栏

    继承了AppCompatActivity的Activity无法通过调用requestWindowFeature(Window.FEATURE_NO_TITLE)来隐藏标题栏. public class ...

  9. C Primer Plus 学习体会

    本月刚刚开始学习<C primer plus>,之前课上草草学过一遍,讲到指针就结束了.现在重新开始看感觉难度不大只是刚开始接触有些语言细节比较琐碎.学习这一周的体会如下: 诸多前辈推荐的 ...

  10. 《中国文明史》系列—外柔 VS 内厉

    读启良的<中国文明史>,里面有谈到外柔而内厉——中国政府自古以来奉行的准则.大致意思是说,我华夏民族对待周边民族,历来是很友好的,即所谓的“柔”,而对待自己人,向来是“刚”或曰“厉”的. ...