using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Web.Script.Serialization; using static TimedUpload.QuartzJobs.SFTPUploadJob; public class JsonExporter { public void ExportDailyDataToJson(List dailyDataList, string outputDirectory) { if (!Directory.Exists(outputDirectory)) { Directory.CreateDirectory(outputDirectory); } var serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new[] { new CustomJsonConverter() }); serializer.MaxJsonLength = int.MaxValue; foreach (var dailyData in dailyDataList) { if (dailyData.RecordCount > 0) { string fileName = $"{dailyData.Date:yyyyMMdd}.json"; string filePath = Path.Combine(outputDirectory, fileName); // 手动构建JSON字符串以确保日期格式正确 string json = BuildJsonString(dailyData); File.WriteAllText(filePath, json, Encoding.UTF8); Console.WriteLine($"已导出 {dailyData.Date:yyyy-MM-dd} 的数据,共 {dailyData.RecordCount} 条记录"); } } } private string BuildJsonString(DailyData dailyData) { var sb = new StringBuilder(); sb.Append("{"); sb.Append($"\"Date\":\"{dailyData.Date:yyyy-MM-dd}\","); sb.Append($"\"RecordCount\":{dailyData.RecordCount},"); sb.Append("\"Records\":["); for (int i = 0; i < dailyData.Records.Count; i++) { var record = dailyData.Records[i]; sb.Append("{"); sb.Append($"\"ReadingDT\":\"{record.ReadingDT:yyyy-MM-dd HH:mm:ss}\","); sb.Append($"\"Reading\":{record.Reading},"); sb.Append($"\"ElecAddress\":\"{record.ElecAddress}\""); sb.Append("}"); if (i < dailyData.Records.Count - 1) { sb.Append(","); } } sb.Append("]}"); return sb.ToString(); } public void ExportAllToSingleJson(List dailyDataList, string filePath) { var sb = new StringBuilder(); sb.Append("["); for (int i = 0; i < dailyDataList.Count; i++) { var dailyData = dailyDataList[i]; sb.Append("{"); sb.Append($"\"Date\":\"{dailyData.Date:yyyy-MM-dd}\","); sb.Append($"\"RecordCount\":{dailyData.RecordCount},"); sb.Append("\"Records\":["); for (int j = 0; j < dailyData.Records.Count; j++) { var record = dailyData.Records[j]; sb.Append("{"); sb.Append($"\"ReadingDT\":\"{record.ReadingDT:yyyy-MM-dd HH:mm:ss}\","); sb.Append($"\"Reading\":{record.Reading},"); sb.Append($"\"ElecAddress\":\"{record.ElecAddress}\""); sb.Append("}"); if (j < dailyData.Records.Count - 1) { sb.Append(","); } } sb.Append("]}"); if (i < dailyDataList.Count - 1) { sb.Append(","); } } sb.Append("]"); File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8); } }