[原創] 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)不支持多層插入.

 

 

如果哪位大神有更好 的辦法,請告知我,謝謝!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM