[原创] C# dynamic拼接Json串
using Newtonsoft.Json;
之前拼接两个json串,是用的这样的代码
var tmp = "," + json1.Substring(1, json1.Length - 2); json2 = json2.Insert(json2 - 1, 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)不支持多层插入.
如果哪位大神有更好 的办法,请告知我,谢谢!!!