MsgPackage.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using Cksoft.Unity;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using System;
  5. using System.Data;
  6. using System.IO;
  7. using System.Runtime.Serialization;
  8. using System.Runtime.Serialization.Formatters.Binary;
  9. namespace DllMsgPackage
  10. {
  11. public class MsgPackage
  12. {
  13. //把数据集序列化成二进制流
  14. public static byte[] DataSetToBytes(DataSet ds, ref string errorinfo)
  15. {
  16. try
  17. {
  18. ds.RemotingFormat = SerializationFormat.Binary;
  19. MemoryStream ms = new MemoryStream();
  20. IFormatter bf = new BinaryFormatter();
  21. bf.Serialize(ms, ds);
  22. byte[] bytes = ms.ToArray();
  23. ms.Close();
  24. //BinaryFormatter ser = new BinaryFormatter();
  25. //MemoryStream unCompressMS = new MemoryStream();
  26. //ds.RemotingFormat = SerializationFormat.Binary;
  27. //ser.Serialize(unCompressMS, ds);
  28. //byte[] bytes = unCompressMS.ToArray();
  29. //unCompressMS.Close();
  30. return bytes;
  31. }
  32. catch (Exception ex)
  33. {
  34. errorinfo = ex.ToString();
  35. return null;
  36. }
  37. }
  38. //将二进制转换为DataSet
  39. public static DataSet BytesToDataSet(byte[] datas, ref string errorinfo)
  40. {
  41. try
  42. {
  43. MemoryStream ms = new MemoryStream(datas);
  44. BinaryFormatter bf = new BinaryFormatter();
  45. object obj = bf.Deserialize(ms);
  46. DataSet ds = (DataSet)obj;
  47. ms.Close();
  48. return ds;
  49. }
  50. catch (Exception ex)
  51. {
  52. errorinfo = ex.Message.ToString();
  53. return null;
  54. }
  55. }
  56. public static string DataSetToStr(DataSet ds, ref string errorinfo)
  57. {
  58. try
  59. {
  60. DataTable tableinfo = new DataTable("table_info");
  61. tableinfo.Columns.Add("tablename");
  62. tableinfo.Columns.Add("fnum", Type.GetType("System.Int32"));
  63. tableinfo.Columns.Add("colname");
  64. tableinfo.Columns.Add("coltype");
  65. JObject jsonobj = new JObject();
  66. jsonobj.Add("table_count", ds.Tables.Count);
  67. string tablename = "";
  68. foreach (DataTable dt in ds.Tables)
  69. {
  70. tablename += tablename == "" ? dt.TableName : "," + dt.TableName;
  71. jsonobj.Add(dt.TableName, dt.ToJson());
  72. int fnum = 0;
  73. foreach (DataColumn dc in dt.Columns)
  74. {
  75. fnum += 10;
  76. DataRow addrow= tableinfo.NewRow();
  77. tableinfo.Rows.Add(addrow);
  78. addrow["tablename"] = dt.TableName;
  79. addrow["fnum"] = fnum;
  80. addrow["colname"] = dc.ColumnName;
  81. addrow["coltype"] = dc.DataType.ToString();
  82. }
  83. }
  84. jsonobj.Add("table_name", tablename);
  85. jsonobj.Add("table_info", tableinfo.ToJson());
  86. return jsonobj.ToJson();
  87. }
  88. catch (Exception ex)
  89. {
  90. errorinfo = ex.Message.ToString();
  91. return "";
  92. }
  93. }
  94. public static DataSet StrToDataSet(string orgstr, ref string errorinfo)
  95. {
  96. try
  97. {
  98. JObject jsonobj = JsonConvert.DeserializeObject<JObject>(orgstr);
  99. if(jsonobj.ContainsKey("errorinfo"))
  100. {
  101. errorinfo = jsonobj["errorinfo"].ToString();
  102. return null;
  103. }
  104. int tablecount = int.Parse(jsonobj["table_count"].ToString());
  105. string tablename = jsonobj["table_name"].ToString();
  106. string[] tabs = tablename.Split(',');
  107. DataSet reds = new DataSet();
  108. foreach (string ttname in tabs)
  109. {
  110. string strs = jsonobj[ttname].ToString();
  111. DataTable tempdt = JsonConvert.DeserializeObject<DataTable>(strs);
  112. tempdt.TableName = ttname;
  113. reds.Merge(tempdt);
  114. }
  115. string tableinfostr = jsonobj["table_info"].ToString();
  116. DataTable tableinfodt= JsonConvert.DeserializeObject<DataTable>(tableinfostr);
  117. string condition ="";
  118. DataRow[] rows =null;
  119. foreach (DataTable dt in reds.Tables)
  120. {
  121. if (dt.Columns.Count > 0)//说明有,无需处理
  122. {
  123. //要转换数据类型
  124. //foreach(DataColumn dc in dt.Columns)
  125. //{
  126. // condition = string.Format($"tablename='{dt.TableName}' and colname='{dc.ColumnName}'");
  127. // rows = tableinfodt.Select(condition, "fnum");
  128. // if (rows.Length <= 0)
  129. // continue;
  130. // dc.DataType = Type.GetType(rows[0]["coltype"].ToString());
  131. //}
  132. continue;
  133. }
  134. condition = string.Format($"tablename='{dt.TableName}'");
  135. rows = tableinfodt.Select(condition, "fnum");
  136. foreach(DataRow ttrow in rows)
  137. {
  138. DataColumn dc = dt.Columns.Add(ttrow["colname"].ToString(), Type.GetType(ttrow["coltype"].ToString()));
  139. }
  140. }
  141. return reds;
  142. }
  143. catch (Exception ex)
  144. {
  145. errorinfo = ex.Message.ToString();
  146. return null;
  147. }
  148. }
  149. }
  150. }