// using System.Text.RegularExpressions; namespace SafeCampus.SqlSugar; /// /// 种子数据工具类 /// public class SeedDataUtil { public static List GetSeedData(string jsonName) { var seedData = new List();//种子数据结果 var basePath = AppContext.BaseDirectory;//获取项目目录 var json = basePath.CombinePath("SeedData", "Json", jsonName);//获取文件路径 var dataString = FileHelper.ReadFile(json);//读取文件 if (!string.IsNullOrEmpty(dataString))//如果有内容 { //字段没有数据的替换成null dataString = dataString.Replace("\"\"", "null"); #region 针对导出的json字符串嵌套json字符串如 "DefaultDataScope": "{\"Level\":5,\"ScopeCategory\":\"SCOPE_ALL\",\"ScopeDefineOrgIdList\":[]}" //正则匹配"ConfigValue": "[{开头的字符串以]"结尾 var matcheDefaultDataScope = Regex.Matches(dataString, "\"DefaultDataScope\": \"\\{.*?\\}\""); foreach (Match match in matcheDefaultDataScope) { //获取匹配的值 var value = match.Value; //将匹配的值替换成"ConfigValue": "{XXX}" //字符串是\"的替换成" var newValue = value.Replace("\\\"", "\""); //字符串是\{替换成{ newValue = newValue.Replace("\"{", "{"); //字符串是}"的替换成} newValue = newValue.Replace("}\"", "}"); dataString = dataString.Replace(value, newValue); } #endregion 针对导出的json字符串嵌套json字符串如 "DefaultDataScope": "{\"Level\":5,\"ScopeCategory\":\"SCOPE_ALL\",\"ScopeDefineOrgIdList\":[]}" #region Sys_Org //如果T是Sys_Org var nameofT = typeof(T).Name;//获取类型名称 if (nameofT == "SysOrg") { //字段是"[的替换成[ dataString = dataString.Replace("\"[", "["); //字段是]"的替换成] dataString = dataString.Replace("]\"", "]"); } #endregion //将json字符串转为实体,这里ExtJson可以正常转换为字符串 var seedDataRecord1 = dataString.ToJsonEntity>(); //正则匹配"ConfigValue": "[{开头的字符串以]"结尾 var matches = Regex.Matches(dataString, "\"ConfigValue\": \"\\[\\{.*?\\}\\]\""); foreach (Match match in matches) { //获取匹配的值 var value = match.Value; //将匹配的值替换成"ConfigValue": "null" dataString = dataString.Replace(value, "\"ConfigValue\": \"null\""); } #region 针对导出的json字符串嵌套json字符串如 "DefaultDataScope": "{\"Level\":5,\"ScopeCategory\":\"SCOPE_ALL\",\"ScopeDefineOrgIdList\":[]}" //字符串是\"的替换成" dataString = dataString.Replace("\\\"", "\""); //字符串是\{替换成{ dataString = dataString.Replace("\"{", "{"); //字符串是}"的替换成} dataString = dataString.Replace("}\"", "}"); //将json字符串转为实体,这里ExtJson会转为null,替换字符串把ExtJson值变为实体类型而实体类是string类型 var seedDataRecord2 = dataString.ToJsonEntity>(); #endregion 针对导出的json字符串嵌套json字符串如 "DefaultDataScope": "{\"Level\":5,\"ScopeCategory\":\"SCOPE_ALL\",\"ScopeDefineOrgIdList\":[]}" //遍历seedDataRecord2 for (var i = 0; i < seedDataRecord2.Records.Count; i++) { #region 处理ExtJosn //获取ExtJson属性 var propertyExtJson = typeof(T).GetProperty(nameof(PrimaryKeyEntity.ExtJson)); if (propertyExtJson != null) { //获取ExtJson的值 var extJson = propertyExtJson.GetValue(seedDataRecord2.Records[i])?.ToString(); // 如果ExtJson不为空并且包含NullableDictionary表示序列化失败了 if (!string.IsNullOrEmpty(extJson) && extJson.Contains("NullableDictionary")) { //设置ExtJson为seedDataRecord1对应的值 extJson = propertyExtJson.GetValue(seedDataRecord1.Records[i])?.ToString(); //seedDataRecord2赋值seedDataRecord1的ExtJson propertyExtJson.SetValue(seedDataRecord2.Records[i], extJson); } } #endregion 处理ExtJosn #region 处理ConfigValue //获取ExtJson属性 var propertyConfigValue = typeof(T).GetProperty("ConfigValue"); if (propertyConfigValue != null) { //获取configValue的值 var configValue = propertyConfigValue.GetValue(seedDataRecord2.Records[i])?.ToString(); // 如果configValue不为空并且包含NullableDictionary表示序列化失败了 if (!string.IsNullOrEmpty(configValue) && (configValue.Contains("NullableDictionary") || configValue == "null")) { //设置ExtJson为seedDataRecord1对应的值 configValue = propertyConfigValue.GetValue(seedDataRecord1.Records[i])?.ToString(); //seedDataRecord2赋值seedDataRecord1的ExtJson propertyConfigValue.SetValue(seedDataRecord2.Records[i], configValue); } } #endregion 处理ConfigValue } //种子数据赋值 seedData = seedDataRecord2.Records; } return seedData; } } /// /// 种子数据格式实体类,遵循Navicat导出json格式 /// /// public class SeedDataRecords { /// /// 数据 /// public List Records { get; set; } }