using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Http; using System.Threading.Tasks; using Newtonsoft.Json; using Report.Entity; using System.IO; using System.Management; using Newtonsoft.Json.Linq; using System.Data; using System.Text.RegularExpressions; using System.Xml.Linq; using System.Reflection; using System.Windows.Forms; namespace ReportLibrary { public class ClientConfig { public static T DeserializeObject(string data) where T : class { var obj = JsonConvert.DeserializeObject(data); return obj; } public static string SerializeObject(object data) { string str = JsonConvert.SerializeObject(data); return str; } public static string UpdateJson(string data,string insertJson) { JObject jsonObject = JObject.Parse(data); // 将新的 JSON 字符串插入到已有的 JSON 对象中 jsonObject["pic"] = JToken.Parse(insertJson); // 输出结果 string updatedJson = jsonObject.ToString(); return updatedJson; } public static DataSet ConvertJsonToDataSet(string json, string imageUrl,string signUrl) { DataSet dataSet = new DataSet(); JObject jobject = JObject.Parse(json); foreach (var property in jobject.Properties()) { DataTable dataTable = ConvertToDataTable(property.Name, property.Value as JArray, imageUrl, signUrl); if (dataTable != null) { dataSet.Tables.Add(dataTable); } } return dataSet; } private static DataTable ConvertToDataTable(string tableName, JArray jsonArray, string imageUrl, string signUrl) { if (jsonArray == null || jsonArray.Count == 0) return null; DataTable dataTable = new DataTable(tableName); // Get the columns from the first JSON object JObject firstObject = jsonArray[0] as JObject; if (firstObject != null) { foreach (var property in firstObject.Properties()) { if (property.Name.Contains("Date")) dataTable.Columns.Add(property.Name, typeof(DateTime)); else dataTable.Columns.Add(property.Name, typeof(string)); /* if (property.Name.Equals("displayOrder")) dataTable.Columns.Add(property.Name, typeof(int)); else if(property.Name.Contains("Date")) dataTable.Columns.Add(property.Name, typeof(DateTime)); else dataTable.Columns.Add(property.Name, typeof(string)); // Assuming all values are strings, you might want to infer types dynamically */ } } // Populate the DataTable with rows foreach (JObject jsonObject in jsonArray) { DataRow row = dataTable.NewRow(); foreach (var property in jsonObject.Properties()) { if (dataTable.Columns.Contains(property.Name)) { if (property.Name.ToLower().Equals("picturefilename") || property.Name.ToLower().Contains("picturehorizontal") ) { var baseUri = new Uri(imageUrl); var fullUri = new Uri(baseUri, property.Value?.ToString()); row[property.Name] = fullUri.AbsoluteUri; } else if (property.Name.ToLower().Contains("url")) { if (property.Value != null) { var baseUri = new Uri(signUrl); var fullUri = new Uri(baseUri, property.Value?.ToString()); row[property.Name] = fullUri.AbsoluteUri; } } /* else if (property.Name.Equals("displayOrder")) { if (property.Value == null) row[property.Name] = 0; else row[property.Name] = Convert.ToInt64(property.Value?.ToString()); }*/ else if (property.Name.ToLower().Contains("date")) { if (property.Value != null) { string temp = property.Value.ToString(); if (!string.IsNullOrEmpty(temp) && !temp.Equals("/")) row[property.Name] = Convert.ToDateTime(temp); } } else row[property.Name] = property.Value?.ToString(); // Handle null values gracefully } } dataTable.Rows.Add(row); } return dataTable; } } }