JsonExporter.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text;
  5. using System.Web.Script.Serialization;
  6. using static TimedUpload.QuartzJobs.SFTPUploadJob;
  7. public class JsonExporter
  8. {
  9. public void ExportDailyDataToJson(List<DailyData> dailyDataList, string outputDirectory)
  10. {
  11. if (!Directory.Exists(outputDirectory))
  12. {
  13. Directory.CreateDirectory(outputDirectory);
  14. }
  15. var serializer = new JavaScriptSerializer();
  16. serializer.RegisterConverters(new[] { new CustomJsonConverter() });
  17. serializer.MaxJsonLength = int.MaxValue;
  18. foreach (var dailyData in dailyDataList)
  19. {
  20. if (dailyData.RecordCount > 0)
  21. {
  22. string fileName = $"{dailyData.Date:yyyyMMdd}.json";
  23. string filePath = Path.Combine(outputDirectory, fileName);
  24. // 手动构建JSON字符串以确保日期格式正确
  25. string json = BuildJsonString(dailyData);
  26. File.WriteAllText(filePath, json, Encoding.UTF8);
  27. Console.WriteLine($"已导出 {dailyData.Date:yyyy-MM-dd} 的数据,共 {dailyData.RecordCount} 条记录");
  28. }
  29. }
  30. }
  31. private string BuildJsonString(DailyData dailyData)
  32. {
  33. var sb = new StringBuilder();
  34. sb.Append("{");
  35. sb.Append($"\"Date\":\"{dailyData.Date:yyyy-MM-dd}\",");
  36. sb.Append($"\"RecordCount\":{dailyData.RecordCount},");
  37. sb.Append("\"Records\":[");
  38. for (int i = 0; i < dailyData.Records.Count; i++)
  39. {
  40. var record = dailyData.Records[i];
  41. sb.Append("{");
  42. sb.Append($"\"ReadingDT\":\"{record.ReadingDT:yyyy-MM-dd HH:mm:ss}\",");
  43. sb.Append($"\"Reading\":{record.Reading},");
  44. sb.Append($"\"ElecAddress\":\"{record.ElecAddress}\"");
  45. sb.Append("}");
  46. if (i < dailyData.Records.Count - 1)
  47. {
  48. sb.Append(",");
  49. }
  50. }
  51. sb.Append("]}");
  52. return sb.ToString();
  53. }
  54. public void ExportAllToSingleJson(List<DailyData> dailyDataList, string filePath)
  55. {
  56. var sb = new StringBuilder();
  57. sb.Append("[");
  58. for (int i = 0; i < dailyDataList.Count; i++)
  59. {
  60. var dailyData = dailyDataList[i];
  61. sb.Append("{");
  62. sb.Append($"\"Date\":\"{dailyData.Date:yyyy-MM-dd}\",");
  63. sb.Append($"\"RecordCount\":{dailyData.RecordCount},");
  64. sb.Append("\"Records\":[");
  65. for (int j = 0; j < dailyData.Records.Count; j++)
  66. {
  67. var record = dailyData.Records[j];
  68. sb.Append("{");
  69. sb.Append($"\"ReadingDT\":\"{record.ReadingDT:yyyy-MM-dd HH:mm:ss}\",");
  70. sb.Append($"\"Reading\":{record.Reading},");
  71. sb.Append($"\"ElecAddress\":\"{record.ElecAddress}\"");
  72. sb.Append("}");
  73. if (j < dailyData.Records.Count - 1)
  74. {
  75. sb.Append(",");
  76. }
  77. }
  78. sb.Append("]}");
  79. if (i < dailyDataList.Count - 1)
  80. {
  81. sb.Append(",");
  82. }
  83. }
  84. sb.Append("]");
  85. File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
  86. }
  87. }