1.  
  2. namespace Test
  3. {
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using Microshaoft;
  10. using Newtonsoft.Json.Linq;
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. string json = @"
  16. { a: [{a:'asdasd',b:2222},{a:'@a.[2].a'},{a:'ssss'}]}
  17. ";
  18. string json2 = @"
  19. {a:['asdasd','aaaa',{a:1111}]}
  20. ";
  21. Console.WriteLine
  22. (
  23. JsonHelper
  24. .MergeJsonTemplate
  25. (
  26. json
  27. , json2
  28. )
  29. );
  30. Console.ReadLine();
  31. }
  32. static void Main2(string[] args)
  33. {
  34. string json = @"{ 'name10':
  35. 'Admin' }
  36. [{ 'name9': 'Publisher' }][
  37. { 'name4': 'Admin' },{ 'name8': ['Admin'] }]{ 'name7':
  38. 'Admin' }
  39. [{ 'name3': ['Publisher','Publisher'] }]{ 'name5':
  40. 'Admin' }
  41. [{ 'name2': 'Publisher' }]{ 'name6':
  42. 'Admin' }
  43. [{ 'name1': 'Publisher' }]";
  44. JsonTextReader reader = new JsonTextReader(new StringReader(json));
  45. var r = reader.ReadAllMultipleContentsAsEnumerable<JObject>().ToArray();
  46. reader = new JsonTextReader(new StringReader(json));
  47. r = reader
  48. .ReadMultipleContentsAsEnumerable<JObject>(3)
  49. .SelectMany
  50. (
  51. (x) =>
  52. {
  53. return x;
  54. }
  55. ).ToArray();
  56. Console.ReadLine();
  57. }
  58. static void Main1(string[] args)
  59. {
  60. string json = @"{ 'name':
  61. 'Admin',c:1111111 }
  62. [{ 'name': 'Publisher' }][
  63. { 'name': 'Admin' },{ 'name': 'Admin' }]{ 'name':
  64. 'Admin' }
  65. [{ 'name': 'Publisher' }]{ 'name':
  66. 'Admin' }
  67. [{ 'name': 'Publisher' }]{ 'name':
  68. 'Admin' }
  69. [{ 'name': 'Publisher' }]";
  70. IList<Role> roles = new List<Role>();
  71. JsonTextReader reader = new JsonTextReader(new StringReader(json));
  72. var r = reader.ReadAllMultipleContentsAsEnumerable<Role>().ToArray();
  73. reader = new JsonTextReader(new StringReader(json));
  74. r = reader
  75. .ReadMultipleContentsAsEnumerable<Role>(3)
  76. .SelectMany
  77. (
  78. (x) =>
  79. {
  80. return x;
  81. }
  82. ).ToArray();
  83. Console.ReadLine();
  84. }
  85. }
  86. public class Role
  87. {
  88. public string Name { get; set; }
  89. }
  90. }
  91. namespace Microshaoft
  92. {
  93. using Newtonsoft.Json;
  94. using Newtonsoft.Json.Linq;
  95. using System;
  96. using System.IO;
  97. using System.Linq;
  98. using System.Xml.Linq;
  99. using System.Collections.Generic;
  100. public static class JsonHelper
  101. {
  102. public static JToken MergeJsonTemplateToJToken
  103. (
  104. string jsonTemplate
  105. , string jsonData
  106. , string jsonTemplatePathPrefix = "@"
  107. )
  108. {
  109. var jTokenTemplate = JToken.Parse(jsonTemplate);
  110. var jTokenData = JToken.Parse(jsonData);
  111. JsonReaderHelper
  112. .ReadAllPaths
  113. (
  114. jsonTemplate
  115. , (isJArray, jsonPath, valueObject, valueType, reader) =>
  116. {
  117. var vs = valueObject as string;
  118. if (vs != null)
  119. {
  120. vs = vs.Trim();
  121. if (vs.StartsWith(jsonTemplatePathPrefix))
  122. {
  123. var replacedSelectToken = jTokenTemplate.SelectToken(jsonPath);
  124. var trimChars = jsonTemplatePathPrefix.ToCharArray();
  125. vs = vs.TrimStart(trimChars);
  126. var replacementSelectToken = jTokenData.SelectToken(vs);
  127. replacedSelectToken.Replace(replacementSelectToken);
  128. }
  129. }
  130. return false;
  131. }
  132. );
  133. return jTokenTemplate;
  134. }
  135. public static string MergeJsonTemplate
  136. (
  137. string jsonTemplate
  138. , string jsonData
  139. , string jsonTemplatePathPrefix = "@"
  140. )
  141. {
  142. return
  143. MergeJsonTemplateToJToken
  144. (
  145. jsonTemplate
  146. , jsonData
  147. , jsonTemplatePathPrefix
  148. )
  149. .ToString();
  150. }
  151. public static string XmlToJson
  152. (
  153. string xml
  154. , Newtonsoft
  155. .Json
  156. .Formatting formatting
  157. = Newtonsoft
  158. .Json
  159. .Formatting
  160. .Indented
  161. , bool needKeyQuote = false
  162. )
  163. {
  164. XNode xElement;
  165. xElement = XElement.Parse(xml).Elements().First();
  166. string json = string.Empty;
  167. using (var stringWriter = new StringWriter())
  168. {
  169. using (var jsonTextWriter = new JsonTextWriter(stringWriter))
  170. {
  171. jsonTextWriter.Formatting = formatting;
  172. jsonTextWriter.QuoteName = needKeyQuote;
  173. var jsonSerializer = new JsonSerializer();
  174. jsonSerializer.Serialize(jsonTextWriter, xElement);
  175. json = stringWriter.ToString();
  176. }
  177. }
  178. return json;
  179. }
  180. public static string JsonToXml
  181. (
  182. string json
  183. , bool needRoot = false
  184. , string defaultDeserializeRootElementName = "root"
  185. )
  186. {
  187. if (needRoot)
  188. {
  189. json = string.Format
  190. (
  191. @"{{ {1}{0}{2} }}"
  192. , " : "
  193. , defaultDeserializeRootElementName
  194. , json
  195. );
  196. }
  197. //XmlDocument xmlDocument = JsonConvert.DeserializeXmlNode(json, defaultDeserializeRootElementName);
  198. var xDocument = JsonConvert
  199. .DeserializeXNode
  200. (
  201. json
  202. , defaultDeserializeRootElementName
  203. );
  204. var xml = xDocument
  205. .Elements()
  206. .First()
  207. .ToString();
  208. return xml;
  209. }
  210. public static T DeserializeByJTokenPath<T>
  211. (
  212. string json
  213. , string jTokenPath = null //string.Empty
  214. )
  215. {
  216. var jObject = JObject.Parse(json);
  217. var jsonSerializer = new JsonSerializer();
  218. if (string.IsNullOrEmpty(jTokenPath))
  219. {
  220. jTokenPath = string.Empty;
  221. }
  222. var jToken = jObject.SelectToken(jTokenPath);
  223. using (var jsonReader = jToken.CreateReader())
  224. {
  225. return
  226. jsonSerializer
  227. .Deserialize<T>(jsonReader);
  228. }
  229. }
  230. public static string Serialize
  231. (
  232. object target
  233. , bool formattingIndented = false
  234. , bool keyQuoteName = false
  235. )
  236. {
  237. string json = string.Empty;
  238. using (StringWriter stringWriter = new StringWriter())
  239. {
  240. using (var jsonTextWriter = new JsonTextWriter(stringWriter))
  241. {
  242. jsonTextWriter.QuoteName = keyQuoteName;
  243. jsonTextWriter.Formatting = (formattingIndented ? Formatting.Indented : Formatting.None);
  244. var jsonSerializer = new JsonSerializer();
  245. jsonSerializer.Serialize(jsonTextWriter, target);
  246. json = stringWriter.ToString();
  247. }
  248. }
  249. return json;
  250. }
  251. public static void ReadJsonPathsValuesAsStrings
  252. (
  253. string json
  254. , string[] jsonPaths
  255. , Func<string, string, bool> onReadedOncePathStringValueProcesssFunc = null
  256. )
  257. {
  258. using (var stringReader = new StringReader(json))
  259. {
  260. using (var jsonReader = new JsonTextReader(stringReader))
  261. {
  262. bool breakAndReturn = false;
  263. while
  264. (
  265. jsonReader.Read()
  266. &&
  267. !breakAndReturn
  268. )
  269. {
  270. foreach (var x in jsonPaths)
  271. {
  272. if (x == jsonReader.Path)
  273. {
  274. if (onReadedOncePathStringValueProcesssFunc != null)
  275. {
  276. var s = jsonReader.ReadAsString();
  277. breakAndReturn
  278. = onReadedOncePathStringValueProcesssFunc
  279. (
  280. x
  281. , s
  282. );
  283. if (breakAndReturn)
  284. {
  285. break;
  286. }
  287. }
  288. }
  289. }
  290. }
  291. }
  292. }
  293. }
  294. public static IEnumerable<TElement>
  295. DeserializeToFromDictionary<TKey, TValue, TElement>
  296. (
  297. string json
  298. , Func<TKey, TValue, TElement> OnOneElementProcessFunc
  299. )
  300. {
  301. //IEnumerable<TElement> r = default(IEnumerable<TElement>);
  302. return
  303. DeserializeByJTokenPath<Dictionary<TKey, TValue>>(json)
  304. .Select
  305. (
  306. (x) =>
  307. {
  308. var rr = OnOneElementProcessFunc(x.Key, x.Value);
  309. return rr;
  310. }
  311. );
  312. //return r;
  313. }
  314. }
  315. }
  316. namespace Microshaoft
  317. {
  318. using Newtonsoft.Json;
  319. using Newtonsoft.Json.Linq;
  320. using System.Collections.Generic;
  321. using System;
  322. using System.IO;
  323. public static class JsonReaderHelper
  324. {
  325. public static void ReadAllPaths
  326. (
  327. string json
  328. , Func<bool, string, object, Type, JsonReader, bool> onReadPathOnceProcessFunc
  329. )
  330. {
  331. using (JsonReader reader = new JsonTextReader(new StringReader(json)))
  332. {
  333. var isStarted = false;
  334. var isJArray = false;
  335. while (reader.Read())
  336. {
  337. JsonToken tokenType = reader.TokenType;
  338. if (!isStarted)
  339. {
  340. if (tokenType == JsonToken.StartArray)
  341. {
  342. isJArray = true;
  343. isStarted = true;
  344. }
  345. else if (tokenType == JsonToken.StartArray)
  346. {
  347. isStarted = true;
  348. }
  349. else if (tokenType == JsonToken.StartConstructor)
  350. {
  351. isStarted = true;
  352. }
  353. }
  354. if
  355. (
  356. tokenType != JsonToken.Comment
  357. &&
  358. tokenType != JsonToken.PropertyName
  359. )
  360. {
  361. var jsonPath = reader.Path;
  362. if (!string.IsNullOrEmpty(jsonPath))
  363. {
  364. var valueType = reader.ValueType;
  365. var valueObject = reader.Value;
  366. if (valueType != null)
  367. {
  368. var r = onReadPathOnceProcessFunc
  369. (
  370. isJArray
  371. , jsonPath
  372. , valueObject
  373. , valueType
  374. , reader
  375. );
  376. if (r)
  377. {
  378. break;
  379. }
  380. }
  381. }
  382. }
  383. }
  384. reader.Close();
  385. }
  386. }
  387. public static void ReadAllMultipleContents
  388. (
  389. this JsonReader target
  390. )
  391. {
  392. if (!target.SupportMultipleContent)
  393. {
  394. target.SupportMultipleContent = true;
  395. }
  396. var serializer = new JsonSerializer();
  397. //serializer.CheckAdditionalContent
  398. while (target.Read())
  399. {
  400. Console.WriteLine(target.TokenType);
  401. var r = serializer.Deserialize(target);
  402. Console.WriteLine(r.GetType());
  403. Console.WriteLine(r.ToString());
  404. }
  405. }
  406. public static IEnumerable<JToken> ReadMultipleContents
  407. (
  408. this JsonReader target
  409. )
  410. {
  411. if (!target.SupportMultipleContent)
  412. {
  413. target.SupportMultipleContent = true;
  414. }
  415. var serializer = new JsonSerializer();
  416. while (target.Read())
  417. {
  418. if (target.TokenType == JsonToken.StartObject)
  419. {
  420. JToken entry = serializer.Deserialize<JToken>(target);
  421. yield return entry;
  422. }
  423. else if (target.TokenType == JsonToken.StartArray)
  424. {
  425. JArray entries = serializer.Deserialize<JArray>(target);
  426. foreach (var entry in entries)
  427. {
  428. if (entry is JArray)
  429. {
  430. //Console.WriteLine();
  431. }
  432. yield return (JToken)entry;
  433. }
  434. }
  435. }
  436. }
  437. public static IEnumerable<IEnumerable<T>> ReadMultipleContentsAsEnumerable<T>
  438. (
  439. this JsonReader target
  440. , int pageSize = 10
  441. )
  442. {
  443. if (!target.SupportMultipleContent)
  444. {
  445. target.SupportMultipleContent = true;
  446. }
  447. var serializer = new JsonSerializer();
  448. var list = new List<T>();
  449. var i = 0;
  450. while (target.Read())
  451. {
  452. if (target.TokenType == JsonToken.StartArray)
  453. {
  454. var entries = serializer.Deserialize<T[]>(target);
  455. foreach (var entry in entries)
  456. {
  457. if (i < pageSize)
  458. {
  459. i++;
  460. list.Add(entry);
  461. }
  462. if (i >= pageSize)
  463. {
  464. yield return list;
  465. list.Clear();
  466. i = 0;
  467. }
  468. }
  469. }
  470. else
  471. {
  472. var entry = serializer.Deserialize<T>(target);
  473. if (i < pageSize)
  474. {
  475. i++;
  476. list.Add(entry);
  477. }
  478. if (i >= pageSize)
  479. {
  480. yield return list;
  481. list.Clear();
  482. i = 0;
  483. }
  484. }
  485. }
  486. if (i > 0)
  487. {
  488. yield return list;
  489. list.Clear();
  490. i = 0;
  491. list = null;
  492. }
  493. }
  494. public static IEnumerable<T> ReadAllMultipleContentsAsEnumerable<T>(this JsonReader target)
  495. {
  496. if (!target.SupportMultipleContent)
  497. {
  498. target.SupportMultipleContent = true;
  499. }
  500. var serializer = new JsonSerializer();
  501. while (target.Read())
  502. {
  503. if (target.TokenType == JsonToken.StartArray)
  504. {
  505. var entries = serializer.Deserialize<T[]>(target);
  506. foreach (var entry in entries)
  507. {
  508. yield return entry;
  509. }
  510. }
  511. else
  512. {
  513. var entry = serializer.Deserialize<T>(target);
  514. yield return entry;
  515. }
  516. }
  517. }
  518. }
  519. }

JsonHelper MergeJsonTemplate的更多相关文章

  1. JSON扩展类——JsonHelper

    1.引用Newtonsoft.Json库(JSON.NET). 2.复制粘贴JsonHelper吧. 源代码: using System; using System.Collections.Gener ...

  2. JsonHelper developed by using Newtonsoft.Json.NET, Deserialize to <T> object , XmlToJson/JsonToXml, QuoteName by using JToken Path.

    namespace TestConsoleApplication { using System; using System.Diagnostics; using System.Threading; u ...

  3. 【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用

     四个主要操作类:JsonConverter .JsonHelper .JsonSplit .AjaxResult 一.JsonConverter: 自定义查询对象转换动态类.object动态类转换j ...

  4. C#序列化及反序列化Json对象通用类JsonHelper

    当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper ...

  5. asp.net的JSONHelper 类

    调用方法: ){    jsons = json.ToString();}else{    jsons = @"{success:false}";}return jsons; JS ...

  6. C# jsonhelper

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Sc ...

  7. JsonHelper

    .net下的json序列化在以前没有Newtonsoft.Json崭露头角之前采用System.Web.Script.Serialization命名空间下的JavaScriptSerializer对象 ...

  8. JsonHelper类(序列化和反序列化辅助类)

       1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Web; ...

  9. CollatingOfData 之 JsonHelper

    1 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System. ...

随机推荐

  1. vim + ctags + taglist配置和使用

    vim +ctags + taglist ,ctags+cscope 安装配置和使用 内容:VIM下ctags和taglist的安装配置方法:一键安装 ctags和cscope的方法 :vim语法高亮 ...

  2. 移动端Web开发调试之Chrome远程调试(Remote Debugging)

    比如手机钉钉调试页面,下面是一位同学整理的链接: http://blog.csdn.net/freshlover/article/details/42528643/ 如果inspect 后,一直空白, ...

  3. EntityFramework 优化建议

    Entity Framework目前最新版本是6.1.3,当然Entity Framework 7 目前还是预览版,并不能投入正式生产环境,估计正式版16年第一季度会出来,了解过EF7的部分新特性后, ...

  4. 年月日与time的相互转换

    年月日的转换 // 这里就是把时间格式化成你要的 SimpleDateFormat sdf = new SimpleDateFormat("yyyy");//将时间转换为年 Sim ...

  5. css3 FlexBox 弹性布局

    Flex 弹性布局 这个是css3中新添加的内容,现在已经支持所有的浏览器,利用Flex布局,可以简便.完整.响应式地实现各种页面布局. 注意:在设置 flex 后,子元素的flaot ,clear, ...

  6. Cvim的安装与使用

    一.安装cvim插件 第一步:下载cvim的安装包 在linux系统下的浏览器firefox.chrome浏览器中打开下面链接 www.vim.org/scripts/download_script. ...

  7. PHP 数据库连接工具类(MySQLI函数包装)

    ====================mysql===================== <?php class mysql { private $mysqli; private $resu ...

  8. 3篇NeuroImage文献分析

    鉴于之前读的一些文章很容易就忘掉了,故打算花点时间记录下所读的文献. 这几天花了一些时间读了3篇文献: Intersubject consistency of cortical MEG signals ...

  9. css中的负边距

    css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...

  10. 在CentOS下搭建自己的Git服务器

    首先需要装好CentOS系统,作为测试,你可以选择装在虚拟机上,这样比较方便.这步默认你会,就不讲了.有了CentOS,那么如何搭建Git服务器呢?1.首先需要安装Git,可以使用yum源在线安装: ...