You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

849 lines
33 KiB

3 weeks ago
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Data.Common;
  6. using System.Linq;
  7. using System.Reflection;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Globalization;
  11. namespace ICSSoft.Common
  12. {
  13. public class DataToJsonHelper
  14. {
  15. /* string sql = @"SELECT Identification,y.DepCode,a.ToWarehouseCode AS WarehouseCode
  16. FROM ICSWareHouseLotInfoLog a
  17. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  18. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  19. INNER JOIN ICSOOPick x ON c.SourceDetailID=x.PickID AND c.WorkPoint=x.WorkPoint
  20. INNER JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  21. GROUP BY Identification,y.DepCode,a.ToWarehouseCode
  22. SELECT Identification,y.OOCode,
  23. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID
  24. FROM ICSWareHouseLotInfoLog a
  25. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  26. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  27. INNER JOIN ICSOOPick x ON c.SourceDetailID=x.PickID AND c.WorkPoint=x.WorkPoint
  28. INNER JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  29. GROUP BY Identification,y.OOCode,a.MUSER,a.InvCode,c.SourceDetailID";
  30. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd, language);
  31. string RelationName = "details";
  32. DataRelation dr = new DataRelation(RelationName, ds.Tables[0].Columns["Identification"], ds.Tables[1].Columns["Identification"]);
  33. ds.Relations.Add(dr);
  34. string aaa = DataToJson.DataSetToJson(ds, RelationName);
  35. */
  36. /// <summary>
  37. /// DataSet转Json字符串,主子结构
  38. /// 需要建立主子表关系,第一张表为主表
  39. /// 会排除关联列
  40. /// </summary>
  41. /// <param name="dataSet"></param>
  42. /// <param name="RelationName">关系名称</param>
  43. /// <returns></returns>
  44. public static string DataSetToJson(DataSet dataSet,string RelationName,string column)
  45. {
  46. //if (!dataSet.Tables[0].Columns.Contains(column))
  47. //{
  48. //}
  49. DataRelation dataRelation = new DataRelation(RelationName, dataSet.Tables[0].Columns[column], dataSet.Tables[1].Columns[column]);
  50. dataSet.Relations.Add(dataRelation);
  51. StringBuilder jsonString = new StringBuilder();
  52. //foreach (DataTable table in dataSet.Tables)
  53. //{
  54. DataTable table = dataSet.Tables[0];
  55. jsonString.Append("[");
  56. DataRowCollection drc = table.Rows;
  57. for (int i = 0; i < drc.Count; i++)
  58. {
  59. DataRow dataRow = drc[i];
  60. jsonString.Append("{");
  61. for (int j = 0; j < table.Columns.Count; j++)
  62. {
  63. string strKey = table.Columns[j].ColumnName;
  64. if (dataSet.Relations[RelationName].ParentColumns.Select(a=>a.Caption).Contains(strKey))
  65. continue;
  66. string strValue = dataRow[j].ToString();
  67. Type type = table.Columns[j].DataType;
  68. jsonString.Append("\"" + strKey + "\":");
  69. strValue = StringFormat(strValue, type);
  70. if (j < table.Columns.Count - 1)
  71. {
  72. jsonString.Append(strValue + ",");
  73. }
  74. else
  75. {
  76. jsonString.Append(strValue);
  77. }
  78. }
  79. jsonString.Append(",\"" + RelationName + "\":");
  80. DataRow[] drs = dataRow.GetChildRows(RelationName);
  81. jsonString.Append("[");
  82. foreach (DataRow dr in drs)
  83. {
  84. DataTable dt = dr.Table;
  85. jsonString.Append("{");
  86. for (int j = 0; j < dt.Columns.Count; j++)
  87. {
  88. string strKey = dt.Columns[j].ColumnName;
  89. if (dataSet.Relations[RelationName].ChildColumns.Select(a => a.Caption).Contains(strKey))
  90. continue;
  91. string strValue = dr[j].ToString();
  92. Type type = dt.Columns[j].DataType;
  93. jsonString.Append("\"" + strKey + "\":");
  94. strValue = StringFormat(strValue, type);
  95. if (j < dt.Columns.Count - 1)
  96. {
  97. jsonString.Append(strValue + ",");
  98. }
  99. else
  100. {
  101. jsonString.Append(strValue);
  102. }
  103. }
  104. jsonString.Append("},");
  105. }
  106. if(drs.Length>0)
  107. jsonString.Remove(jsonString.Length - 1, 1);
  108. jsonString.Append("]");
  109. jsonString.Append("},");
  110. }
  111. jsonString.Remove(jsonString.Length - 1, 1);
  112. jsonString.Append("]");
  113. //}
  114. string res = jsonString.ToString();
  115. return res;
  116. }
  117. public static string DataSetToJson2(DataSet dataSet, string RelationName, string column)
  118. {
  119. //if (!dataSet.Tables[0].Columns.Contains(column))
  120. //{
  121. //}
  122. DataRelation dataRelation = new DataRelation(RelationName, dataSet.Tables[0].Columns[column], dataSet.Tables[1].Columns[column]);
  123. dataSet.Relations.Add(dataRelation);
  124. StringBuilder jsonString = new StringBuilder();
  125. //foreach (DataTable table in dataSet.Tables)
  126. //{
  127. DataTable table = dataSet.Tables[0];
  128. jsonString.Append("[");
  129. DataRowCollection drc = table.Rows;
  130. for (int i = 0; i < drc.Count; i++)
  131. {
  132. DataRow dataRow = drc[i];
  133. jsonString.Append("{");
  134. for (int j = 0; j < table.Columns.Count; j++)
  135. {
  136. string strKey = table.Columns[j].ColumnName;
  137. if (dataSet.Relations[RelationName].ParentColumns.Select(a => a.Caption).Contains(strKey))
  138. continue;
  139. string strValue = dataRow[j].ToString();
  140. Type type = table.Columns[j].DataType;
  141. jsonString.Append("\"" + strKey + "\":");
  142. strValue = StringFormat(strValue, type);
  143. if (j < table.Columns.Count - 1)
  144. {
  145. jsonString.Append(strValue + ",");
  146. }
  147. else
  148. {
  149. jsonString.Append(strValue);
  150. }
  151. }
  152. jsonString.Append(",\"" + RelationName + "\":");
  153. DataRow[] drs = dataRow.GetChildRows(RelationName);
  154. jsonString.Append("[");
  155. foreach (DataRow dr in drs)
  156. {
  157. DataTable dt = dr.Table;
  158. jsonString.Append("{");
  159. for (int j = 0; j < dt.Columns.Count; j++)
  160. {
  161. string strKey = dt.Columns[j].ColumnName;
  162. if (dataSet.Relations[RelationName].ChildColumns.Select(a => a.Caption).Contains(strKey))
  163. continue;
  164. string strValue = dr[j].ToString();
  165. Type type = dt.Columns[j].DataType;
  166. jsonString.Append("\"" + strKey + "\":");
  167. strValue = StringFormat(strValue, type);
  168. if (j < dt.Columns.Count - 1)
  169. {
  170. jsonString.Append(strValue + ",");
  171. }
  172. else
  173. {
  174. jsonString.Append(strValue);
  175. }
  176. }
  177. jsonString.Append("},");
  178. }
  179. if (drs.Length > 0)
  180. jsonString.Remove(jsonString.Length - 1, 1);
  181. jsonString.Append("]");
  182. jsonString.Append("},");
  183. }
  184. jsonString.Remove(jsonString.Length - 1, 1);
  185. jsonString.Append("]");
  186. //}
  187. string res = jsonString.ToString();
  188. return res;
  189. }
  190. /// <summary>
  191. /// DataSet转Json字符串,"主-子-子"结构
  192. /// 需要建立主子表关系,第一张表为主表,第二张表为子表,第三张表为子件表
  193. /// 会排除关联列
  194. /// </summary>
  195. /// <param name="dataSet"></param>
  196. /// <param name="RelationName">关系名称</param>
  197. /// <returns></returns>
  198. public static string DataSetToJson(DataSet dataSet,string RelationName,string column,string RelationName2,string column2)
  199. {
  200. //if (!dataSet.Tables[0].Columns.Contains(column))
  201. //{
  202. //}
  203. DataRelation dataRelation = new DataRelation(RelationName, dataSet.Tables[0].Columns[column], dataSet.Tables[1].Columns[column]);
  204. DataRelation dataRelation2 = new DataRelation(RelationName2, dataSet.Tables[1].Columns[column2], dataSet.Tables[2].Columns[column2]);
  205. dataSet.Relations.Add(dataRelation);
  206. dataSet.Relations.Add(dataRelation2);
  207. StringBuilder jsonString = new StringBuilder();
  208. //foreach (DataTable table in dataSet.Tables)
  209. //{
  210. DataTable table = dataSet.Tables[0];
  211. DataTable table2 = dataSet.Tables[1];
  212. jsonString.Append("[");
  213. DataRowCollection drc = table.Rows;
  214. for (int i = 0; i < drc.Count; i++)
  215. {
  216. DataRow dataRow = drc[i];
  217. jsonString.Append("{");
  218. for (int j = 0; j < table.Columns.Count; j++)
  219. {
  220. string strKey = table.Columns[j].ColumnName;
  221. if (dataSet.Relations[RelationName].ParentColumns.Select(a=>a.Caption).Contains(strKey))
  222. continue;
  223. string strValue = dataRow[j].ToString();
  224. Type type = table.Columns[j].DataType;
  225. jsonString.Append("\"" + strKey + "\":");
  226. strValue = StringFormat(strValue, type);
  227. if (j < table.Columns.Count - 1)
  228. {
  229. jsonString.Append(strValue + ",");
  230. }
  231. else
  232. {
  233. jsonString.Append(strValue);
  234. }
  235. }
  236. jsonString.Append(",\"" + RelationName + "\":");
  237. DataRow[] drs = dataRow.GetChildRows(RelationName);
  238. jsonString.Append("[");
  239. foreach (DataRow dr in drs)
  240. {
  241. DataTable dt = dr.Table;
  242. jsonString.Append("{");
  243. for (int j = 0; j < dt.Columns.Count; j++)
  244. {
  245. string strKey = dt.Columns[j].ColumnName;
  246. if (dataSet.Relations[RelationName].ChildColumns.Select(a => a.Caption).Contains(strKey))
  247. continue;
  248. string strValue = dr[j].ToString();
  249. Type type = dt.Columns[j].DataType;
  250. jsonString.Append("\"" + strKey + "\":");
  251. strValue = StringFormat(strValue, type);
  252. if (j < dt.Columns.Count - 1)
  253. {
  254. jsonString.Append(strValue + ",");
  255. }
  256. else
  257. {
  258. jsonString.Append(strValue);
  259. }
  260. }
  261. ////子件表
  262. jsonString.Append(",\"" + RelationName2 + "\":");
  263. //DataRowCollection drc2 = table2.Rows;
  264. //for (int j = 0; j < drc2.Count; j++)
  265. //{
  266. // DataRow dataRow2 = drc2[j];
  267. DataRow[] drss = dr.GetChildRows(RelationName2);//取不到值
  268. jsonString.Append("[");
  269. foreach (DataRow drSec in drss)
  270. {
  271. DataTable dtSec = drSec.Table;
  272. jsonString.Append("{");
  273. for (int k = 0; k < dtSec.Columns.Count; k++)
  274. {
  275. string strKey = dtSec.Columns[k].ColumnName;
  276. if (dataSet.Relations[RelationName2].ChildColumns.Select(a => a.Caption).Contains(strKey))
  277. continue;
  278. string strValue = drSec[k].ToString();
  279. Type type = dtSec.Columns[k].DataType;
  280. jsonString.Append("\"" + strKey + "\":");
  281. strValue = StringFormat(strValue, type);
  282. if (k < dtSec.Columns.Count - 1)
  283. {
  284. jsonString.Append(strValue + ",");
  285. }
  286. else
  287. {
  288. jsonString.Append(strValue);
  289. }
  290. }
  291. jsonString.Append("},");
  292. }
  293. if (drss.Length > 0)
  294. jsonString.Remove(jsonString.Length - 1, 1);
  295. jsonString.Append("]");//detailss的后方括号
  296. jsonString.Append("},");
  297. }
  298. if (drs.Length>0)
  299. jsonString.Remove(jsonString.Length - 1, 1);
  300. jsonString.Append("]");
  301. jsonString.Append("},");
  302. }
  303. jsonString.Remove(jsonString.Length - 1, 1);
  304. jsonString.Append("]");
  305. //}
  306. string res = jsonString.ToString();
  307. return res;
  308. }
  309. public static string DataSetToJsonImprove(DataSet dataSet, string RelationName, string column, string RelationName2, string column2)
  310. {
  311. // 验证参数
  312. if (dataSet == null || dataSet.Tables.Count < 3)
  313. return "[]";
  314. // 移除已存在的关系(避免重复添加)
  315. if (dataSet.Relations.Contains(RelationName))
  316. dataSet.Relations.Remove(RelationName);
  317. if (dataSet.Relations.Contains(RelationName2))
  318. dataSet.Relations.Remove(RelationName2);
  319. try
  320. {
  321. DataRelation dataRelation = new DataRelation(
  322. RelationName,
  323. dataSet.Tables[0].Columns[column],
  324. dataSet.Tables[1].Columns[column]);
  325. DataRelation dataRelation2 = new DataRelation(
  326. RelationName2,
  327. dataSet.Tables[1].Columns[column2],
  328. dataSet.Tables[2].Columns[column2]);
  329. dataSet.Relations.Add(dataRelation);
  330. dataSet.Relations.Add(dataRelation2);
  331. }
  332. catch (Exception ex)
  333. {
  334. throw new ArgumentException("创建数据关系失败", ex);
  335. }
  336. StringBuilder jsonString = new StringBuilder();
  337. jsonString.Append("[");
  338. DataTable table = dataSet.Tables[0];
  339. bool isFirstMain = true;
  340. foreach (DataRow dataRow in table.Rows)
  341. {
  342. if (!isFirstMain)
  343. jsonString.Append(",");
  344. else
  345. isFirstMain = false;
  346. jsonString.Append("{");
  347. // 主表字段
  348. bool isFirstColumn = true;
  349. for (int j = 0; j < table.Columns.Count; j++)
  350. {
  351. string columnName = table.Columns[j].ColumnName;
  352. // 跳过关联字段
  353. if (dataSet.Relations[RelationName].ParentColumns.Any(c => c.ColumnName == columnName))
  354. continue;
  355. if (!isFirstColumn)
  356. jsonString.Append(",");
  357. else
  358. isFirstColumn = false;
  359. jsonString.Append($"\"{columnName}\":");
  360. AppendFormattedValue(jsonString, dataRow[j], table.Columns[j].DataType);
  361. }
  362. // 第一层子表
  363. jsonString.Append($",\"{RelationName}\":[");
  364. DataRow[] childRows = dataRow.GetChildRows(RelationName);
  365. bool isFirstChild = true;
  366. foreach (DataRow childRow in childRows)
  367. {
  368. if (!isFirstChild)
  369. jsonString.Append(",");
  370. else
  371. isFirstChild = false;
  372. jsonString.Append("{");
  373. // 子表字段
  374. bool isFirstChildColumn = true;
  375. DataTable childTable = childRow.Table;
  376. for (int j = 0; j < childTable.Columns.Count; j++)
  377. {
  378. string columnName = childTable.Columns[j].ColumnName;
  379. // 跳过关联字段
  380. if (dataSet.Relations[RelationName].ChildColumns.Any(c => c.ColumnName == columnName))
  381. continue;
  382. if (!isFirstChildColumn)
  383. jsonString.Append(",");
  384. else
  385. isFirstChildColumn = false;
  386. jsonString.Append($"\"{columnName}\":");
  387. AppendFormattedValue(jsonString, childRow[j], childTable.Columns[j].DataType);
  388. }
  389. // 第二层子表(孙表)
  390. jsonString.Append($",\"{RelationName2}\":[");
  391. DataRow[] grandChildRows = childRow.GetChildRows(RelationName2);
  392. bool isFirstGrandChild = true;
  393. foreach (DataRow grandChildRow in grandChildRows)
  394. {
  395. if (!isFirstGrandChild)
  396. jsonString.Append(",");
  397. else
  398. isFirstGrandChild = false;
  399. jsonString.Append("{");
  400. // 孙表字段
  401. bool isFirstGrandChildColumn = true;
  402. DataTable grandChildTable = grandChildRow.Table;
  403. for (int k = 0; k < grandChildTable.Columns.Count; k++)
  404. {
  405. string columnName = grandChildTable.Columns[k].ColumnName;
  406. // 跳过关联字段
  407. if (dataSet.Relations[RelationName2].ChildColumns.Any(c => c.ColumnName == columnName))
  408. continue;
  409. if (!isFirstGrandChildColumn)
  410. jsonString.Append(",");
  411. else
  412. isFirstGrandChildColumn = false;
  413. jsonString.Append($"\"{columnName}\":");
  414. AppendFormattedValue(jsonString, grandChildRow[k], grandChildTable.Columns[k].DataType);
  415. }
  416. jsonString.Append("}");
  417. }
  418. jsonString.Append("]"); // 结束孙表数组
  419. jsonString.Append("}"); // 结束子表对象
  420. }
  421. jsonString.Append("]"); // 结束子表数组
  422. jsonString.Append("}"); // 结束主表对象
  423. }
  424. jsonString.Append("]");
  425. return jsonString.ToString();
  426. }
  427. private static void AppendFormattedValue(StringBuilder sb, object value, Type dataType)
  428. {
  429. if (value == DBNull.Value || value == null)
  430. {
  431. sb.Append("null");
  432. return;
  433. }
  434. if (dataType == typeof(string))
  435. {
  436. string str = value.ToString();
  437. // 转义特殊字符
  438. str = str.Replace("\\", "\\\\")
  439. .Replace("\"", "\\\"")
  440. .Replace("\n", "\\n")
  441. .Replace("\r", "\\r")
  442. .Replace("\t", "\\t");
  443. sb.Append($"\"{str}\"");
  444. }
  445. else if (dataType == typeof(DateTime))
  446. {
  447. DateTime dt = (DateTime)value;
  448. sb.Append($"\"{dt:yyyy-MM-ddTHH:mm:ss}\"");
  449. }
  450. else if (dataType == typeof(bool))
  451. {
  452. sb.Append(value.ToString().ToLower());
  453. }
  454. else if (IsNumericType(dataType))
  455. {
  456. sb.Append(Convert.ToString(value, CultureInfo.InvariantCulture));
  457. }
  458. else
  459. {
  460. sb.Append($"\"{value}\"");
  461. }
  462. }
  463. private static bool IsNumericType(Type type)
  464. {
  465. return type == typeof(int) || type == typeof(long) || type == typeof(double)
  466. || type == typeof(float) || type == typeof(decimal) || type == typeof(short)
  467. || type == typeof(byte) || type == typeof(sbyte) || type == typeof(ushort)
  468. || type == typeof(uint) || type == typeof(ulong);
  469. }
  470. #region 私有方法
  471. /// <summary>
  472. /// 过滤特殊字符
  473. /// </summary>
  474. /// <param name="s">字符串</param>
  475. /// <returns>json字符串</returns>
  476. private static string String2Json(String s)
  477. {
  478. StringBuilder sb = new StringBuilder();
  479. for (int i = 0; i < s.Length; i++)
  480. {
  481. char c = s.ToCharArray()[i];
  482. switch (c)
  483. {
  484. case '\"':
  485. sb.Append("\\\""); break;
  486. case '\\':
  487. sb.Append("\\\\"); break;
  488. case '/':
  489. sb.Append("\\/"); break;
  490. case '\b':
  491. sb.Append("\\b"); break;
  492. case '\f':
  493. sb.Append("\\f"); break;
  494. case '\n':
  495. sb.Append("\\n"); break;
  496. case '\r':
  497. sb.Append("\\r"); break;
  498. case '\t':
  499. sb.Append("\\t"); break;
  500. default:
  501. sb.Append(c); break;
  502. }
  503. }
  504. return sb.ToString();
  505. }
  506. /// <summary>
  507. /// 格式化字符型、日期型、布尔型
  508. /// </summary>
  509. /// <param name="str"></param>
  510. /// <param name="type"></param>
  511. /// <returns></returns>
  512. private static string StringFormat(string str, Type type)
  513. {
  514. if (type == typeof(string))
  515. {
  516. str = String2Json(str);
  517. str = "\"" + str + "\"";
  518. }
  519. else if (type == typeof(DateTime))
  520. {
  521. str = "\"" + str + "\"";
  522. }
  523. else if (type == typeof(bool))
  524. {
  525. str = str.ToLower();
  526. }
  527. else if (type != typeof(string) && string.IsNullOrEmpty(str))
  528. {
  529. str = "\"" + str + "\"";
  530. }
  531. return str;
  532. }
  533. #endregion
  534. #region list转换成JSON
  535. /// <summary>
  536. /// list转换为Json
  537. /// </summary>
  538. /// <typeparam name="T"></typeparam>
  539. /// <param name="list"></param>
  540. /// <returns></returns>
  541. public static string ListToJson<T>(IList<T> list)
  542. {
  543. object obj = list[0];
  544. return ListToJson<T>(list, obj.GetType().Name);
  545. }
  546. /// <summary>
  547. /// list转换为json
  548. /// </summary>
  549. /// <typeparam name="T1"></typeparam>
  550. /// <param name="list"></param>
  551. /// <param name="p"></param>
  552. /// <returns></returns>
  553. private static string ListToJson<T>(IList<T> list, string JsonName)
  554. {
  555. StringBuilder Json = new StringBuilder();
  556. if (string.IsNullOrEmpty(JsonName))
  557. JsonName = list[0].GetType().Name;
  558. Json.Append("{\"" + JsonName + "\":[");
  559. if (list.Count > 0)
  560. {
  561. for (int i = 0; i < list.Count; i++)
  562. {
  563. T obj = Activator.CreateInstance<T>();
  564. PropertyInfo[] pi = obj.GetType().GetProperties();
  565. Json.Append("{");
  566. for (int j = 0; j < pi.Length; j++)
  567. {
  568. Type type = pi[j].GetValue(list[i], null).GetType();
  569. Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type));
  570. if (j < pi.Length - 1)
  571. {
  572. Json.Append(",");
  573. }
  574. }
  575. Json.Append("}");
  576. if (i < list.Count - 1)
  577. {
  578. Json.Append(",");
  579. }
  580. }
  581. }
  582. Json.Append("]}");
  583. return Json.ToString();
  584. }
  585. #endregion
  586. #region 对象转换为Json
  587. /// <summary>
  588. /// 对象转换为json
  589. /// </summary>
  590. /// <param name="jsonObject">json对象</param>
  591. /// <returns>json字符串</returns>
  592. public static string ToJson(object jsonObject)
  593. {
  594. string jsonString = "{";
  595. PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();
  596. for (int i = 0; i < propertyInfo.Length; i++)
  597. {
  598. object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);
  599. string value = string.Empty;
  600. if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)
  601. {
  602. value = "'" + objectValue.ToString() + "'";
  603. }
  604. else if (objectValue is string)
  605. {
  606. value = "'" + ToJson(objectValue.ToString()) + "'";
  607. }
  608. else if (objectValue is IEnumerable)
  609. {
  610. value = ToJson((IEnumerable)objectValue);
  611. }
  612. else
  613. {
  614. value = ToJson(objectValue.ToString());
  615. }
  616. jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ",";
  617. }
  618. jsonString.Remove(jsonString.Length - 1, jsonString.Length);
  619. return jsonString + "}";
  620. }
  621. #endregion
  622. #region 对象集合转换为json
  623. /// <summary>
  624. /// 对象集合转换为json
  625. /// </summary>
  626. /// <param name="array">对象集合</param>
  627. /// <returns>json字符串</returns>
  628. public static string ToJson(IEnumerable array)
  629. {
  630. string jsonString = "{";
  631. foreach (object item in array)
  632. {
  633. jsonString += ToJson(item) + ",";
  634. }
  635. jsonString.Remove(jsonString.Length - 1, jsonString.Length);
  636. return jsonString + "]";
  637. }
  638. #endregion
  639. #region 普通集合转换Json
  640. /// <summary>
  641. /// 普通集合转换Json
  642. /// </summary>
  643. /// <param name="array">集合对象</param>
  644. /// <returns>Json字符串</returns>
  645. public static string ToArrayString(IEnumerable array)
  646. {
  647. string jsonString = "[";
  648. foreach (object item in array)
  649. {
  650. jsonString = ToJson(item.ToString()) + ",";
  651. }
  652. jsonString.Remove(jsonString.Length - 1, jsonString.Length);
  653. return jsonString + "]";
  654. }
  655. #endregion
  656. #region DataSet转换为Json
  657. /// <summary>
  658. /// DataSet转换为Json
  659. /// </summary>
  660. /// <param name="dataSet">DataSet对象</param>
  661. /// <returns>Json字符串</returns>
  662. public static string ToJson(DataSet dataSet)
  663. {
  664. string jsonString = "{";
  665. foreach (DataTable table in dataSet.Tables)
  666. {
  667. jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ",";
  668. }
  669. jsonString = jsonString.TrimEnd(',');
  670. return jsonString + "}";
  671. }
  672. #endregion
  673. #region Datatable转换为Json
  674. /// <summary>
  675. /// Datatable转换为Json
  676. /// </summary>
  677. /// <param name="table">Datatable对象</param>
  678. /// <returns>Json字符串</returns>
  679. public static string ToJson(DataTable dt)
  680. {
  681. StringBuilder jsonString = new StringBuilder();
  682. jsonString.Append("[");
  683. DataRowCollection drc = dt.Rows;
  684. for (int i = 0; i < drc.Count; i++)
  685. {
  686. jsonString.Append("{");
  687. for (int j = 0; j < dt.Columns.Count; j++)
  688. {
  689. string strKey = dt.Columns[j].ColumnName;
  690. string strValue = drc[i][j].ToString();
  691. Type type = dt.Columns[j].DataType;
  692. jsonString.Append("\"" + strKey + "\":");
  693. strValue = StringFormat(strValue, type);
  694. if (j < dt.Columns.Count - 1)
  695. {
  696. jsonString.Append(strValue + ",");
  697. }
  698. else
  699. {
  700. jsonString.Append(strValue);
  701. }
  702. }
  703. jsonString.Append("},");
  704. }
  705. jsonString.Remove(jsonString.Length - 1, 1);
  706. jsonString.Append("]");
  707. return jsonString.ToString();
  708. }
  709. /// <summary>
  710. /// DataTable转换为Json
  711. /// </summary>
  712. public static string ToJson(DataTable dt, string jsonName)
  713. {
  714. StringBuilder Json = new StringBuilder();
  715. if (string.IsNullOrEmpty(jsonName))
  716. jsonName = dt.TableName;
  717. Json.Append("{\"" + jsonName + "\":[");
  718. if (dt.Rows.Count > 0)
  719. {
  720. for (int i = 0; i < dt.Rows.Count; i++)
  721. {
  722. Json.Append("{");
  723. for (int j = 0; j < dt.Columns.Count; j++)
  724. {
  725. Type type = dt.Rows[i][j].GetType();
  726. Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type));
  727. if (j < dt.Columns.Count - 1)
  728. {
  729. Json.Append(",");
  730. }
  731. }
  732. Json.Append("}");
  733. if (i < dt.Rows.Count - 1)
  734. {
  735. Json.Append(",");
  736. }
  737. }
  738. }
  739. Json.Append("]}");
  740. return Json.ToString();
  741. }
  742. #endregion
  743. #region DataReader转换为Json
  744. /// <summary>
  745. /// DataReader转换为Json
  746. /// </summary>
  747. /// <param name="dataReader">DataReader对象</param>
  748. /// <returns>Json字符串</returns>
  749. public static string ToJson(DbDataReader dataReader)
  750. {
  751. StringBuilder jsonString = new StringBuilder();
  752. jsonString.Append("[");
  753. while (dataReader.Read())
  754. {
  755. jsonString.Append("{");
  756. for (int i = 0; i < dataReader.FieldCount; i++)
  757. {
  758. Type type = dataReader.GetFieldType(i);
  759. string strKey = dataReader.GetName(i);
  760. string strValue = dataReader[i].ToString();
  761. jsonString.Append("\"" + strKey + "\":");
  762. strValue = StringFormat(strValue, type);
  763. if (i < dataReader.FieldCount - 1)
  764. {
  765. jsonString.Append(strValue + ",");
  766. }
  767. else
  768. {
  769. jsonString.Append(strValue);
  770. }
  771. }
  772. jsonString.Append("},");
  773. }
  774. dataReader.Close();
  775. jsonString.Remove(jsonString.Length - 1, 1);
  776. jsonString.Append("]");
  777. return jsonString.ToString();
  778. }
  779. #endregion
  780. }
  781. }