using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PipeGallery.Chart; using PipeGallery.Correlator; using PipeGallery.Model; using PipeGallery.ViewModel; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Windows.Controls; using System.Windows.Threading; namespace PipeGallery.Manage { public class DataFactory { public static Dictionary<string, ChartBase> ChartBaseDictionary = new Dictionary<string, ChartBase>(); public static List<string> SnapshotList = new List<string>(); public static string HomePageChartId = "管线泄漏定位"; public static string AuditionChartId = "听音"; public static string FilterBlueChartId = "过滤器蓝"; public static string FilterRedChartId = "过滤器红"; //private static DispatcherTimer timer = new DispatcherTimer(); /// <summary> /// 插件根据Guid得到缓存中 /// </summary> /// <param name="strGuid">数据源对应的GUID</param> /// <returns></returns> internal static object GetShowData(string id) { ChartBase modelBase = ChartBaseDictionary[id]; return modelBase; } //过滤器界面数据初始化 internal static void InitalFilterBlueData(Canvas canvasCoordinates, Grid gridChartContainer) { //坐标系 CoordinatesInfoType _coordinates = new CoordinatesInfoType(); _coordinates.YMaxValue = 100; _coordinates.YMinValue = 0; _coordinates.YMarkCount = 10; _coordinates.XMaxValue = 3000; _coordinates.XMinValue = 20; _coordinates.XMarkCount = 1; _coordinates.YName = ""; _coordinates.XName = "频率(Hz)"; _coordinates.DrawCoordinates(canvasCoordinates, true, ChartType.FilterView); CurveGroupInfo curveGroupInfo = new CurveGroupInfo(); //设置图标ID curveGroupInfo.ID = DataFactory.FilterBlueChartId; curveGroupInfo.DataControl = ControlType.CurveChart; curveGroupInfo.CurveStrokeThickness = 1; curveGroupInfo.Name = "TestData"; curveGroupInfo.Color = "#62aedd"; curveGroupInfo.ChartType = ChartType.FilterView; DataFactory.ChartBaseDictionary[curveGroupInfo.ID] = curveGroupInfo; //界面数据展示 //图表数据展示 BaseControl baseControl = new BaseControl(DataFactory.FilterBlueChartId, _coordinates); gridChartContainer.Children.Add(baseControl); ////随机生成一组数据 //Random rd = new Random(); //for (int i = 0; i < 300; i++) //{ // int r = rd.Next(0, 100); // PointInfo p = new PointInfo(); // //X轴值 // p.XValue = i * 10; // //Y轴值 // p.YValue = r; // curveGroupInfo.CurvePointListInfo.Add(p); //} //启动一个定时器 DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(2); timer.Tick += delegate { if (CalculteSatus.fx != null && CalculteSatus.freB != null) { double coefficient = 100 / CalculteSatus.freB.Max(); curveGroupInfo.CurvePointListInfo.Clear(); if (CalculteSatus.fx != null) { for (int i = 0; i < CalculteSatus.fx.Length; i++) { PointInfo p = new PointInfo(); p.XValue = CalculteSatus.fx[i];//X轴值 p.YValue = CalculteSatus.freB[i] * coefficient;//Y轴值 curveGroupInfo.CurvePointListInfo.Add(p); } } curveGroupInfo.RefreshGeometricFigure(); } }; timer.Start(); } internal static void InitalFilterRedData(Canvas canvasCoordinates, Grid gridChartContainer) { //坐标系 CoordinatesInfoType _coordinates = new CoordinatesInfoType(); _coordinates.YMaxValue = 100; _coordinates.YMinValue = 0; _coordinates.YMarkCount = 10; _coordinates.XMaxValue = 3000; _coordinates.XMinValue = 20; _coordinates.XMarkCount = 1; _coordinates.YName = ""; _coordinates.XName = "频率(Hz)"; _coordinates.DrawCoordinates(canvasCoordinates, true, ChartType.FilterView); CurveGroupInfo curveGroupInfo = new CurveGroupInfo(); //设置图标ID curveGroupInfo.ID = DataFactory.FilterRedChartId; curveGroupInfo.DataControl = ControlType.CurveChart; curveGroupInfo.CurveStrokeThickness = 1; curveGroupInfo.Name = "TestData"; curveGroupInfo.Color = "#d07076"; curveGroupInfo.ChartType = ChartType.FilterView; DataFactory.ChartBaseDictionary[curveGroupInfo.ID] = curveGroupInfo; //界面数据展示 //图表数据展示 BaseControl baseControl = new BaseControl(DataFactory.FilterRedChartId, _coordinates); gridChartContainer.Children.Add(baseControl); ////随机生成一组数据 //Random rd = new Random(); //for (int i = 0; i < 300; i++) //{ // int r = rd.Next(0, 100); // PointInfo p = new PointInfo(); // //X轴值 // p.XValue = i * 10; // //Y轴值 // p.YValue = r; // curveGroupInfo.CurvePointListInfo.Add(p); //} //启动一个定时器 DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(2); timer.Tick += delegate { if (CalculteSatus.fx != null && CalculteSatus.freA != null) { double coefficient = 100 / CalculteSatus.freA.Max(); curveGroupInfo.CurvePointListInfo.Clear(); if (CalculteSatus.fx != null) { for (int i = 0; i < CalculteSatus.fx.Length; i++) { PointInfo p = new PointInfo(); p.XValue = CalculteSatus.fx[i];//X轴值 p.YValue = CalculteSatus.freA[i] * coefficient;//Y轴值 curveGroupInfo.CurvePointListInfo.Add(p); } } curveGroupInfo.RefreshGeometricFigure(); } }; timer.Start(); } private static int SetSignalIntensity(int value) { if (value >= -56) { return 5; } else if (value < -56 && value >= -72) { return 4; } else if (value < -72 && value >= -88) { return 3; } else if (value < -88 && value >= -104) { return 2; } else if (value < -104 && value >= -120) { return 1; } else { return 0; } } //听音界面数据初始化 internal static void InitalAuditionData(Canvas canvasCoordinates, Grid gridChartContainer) { //坐标系 CoordinatesInfoType _coordinates = new CoordinatesInfoType(); _coordinates.YMaxValue = 100; _coordinates.YMinValue = -100; _coordinates.YMarkCount = 10; _coordinates.XMaxValue = 100; _coordinates.XMinValue = 0; _coordinates.XMarkCount = 20; _coordinates.XName = ""; _coordinates.DrawCoordinates(canvasCoordinates, true, ChartType.AuditionView); CurveGroupInfo curveGroupInfo = new CurveGroupInfo(); //设置图标ID curveGroupInfo.ID = DataFactory.AuditionChartId; curveGroupInfo.DataControl = ControlType.CurveChart; curveGroupInfo.CurveStrokeThickness = 1; curveGroupInfo.Name = "TestData"; curveGroupInfo.Color = "#e6f4ff"; DataFactory.ChartBaseDictionary[curveGroupInfo.ID] = curveGroupInfo; //界面数据展示 //图表数据展示 BaseControl baseControl = new BaseControl(DataFactory.AuditionChartId, _coordinates); gridChartContainer.Children.Add(baseControl); RefreshAuditionData(); } public static void RefreshAuditionData() { AuditionViewModel.Instance.SensorASignalIntensity = 5; AuditionViewModel.Instance.SensorBSignalIntensity = 5; AuditionViewModel.Instance.Volume = 30; //随机生成一组数据 Random rd = new Random(); CurveGroupInfo curveGroupInfo = DataFactory.GetShowData(DataFactory.AuditionChartId) as CurveGroupInfo; if (curveGroupInfo == null) return; for (int i = 0; i < 1000; i++) { //随机生成一组数据 int r = rd.Next(-60, 60); PointInfo p = new PointInfo(); //X轴值 p.XValue = i; //Y轴值 p.YValue = r; curveGroupInfo.CurvePointListInfo.Add(p); } //启动一个定时器,改变绑定数值 DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(1); timer.Tick += delegate { curveGroupInfo.CurvePointListInfo.Clear(); for (int i = 0; i < 1000; i++) { //随机生成一组数据 int r = rd.Next(-60, 60); PointInfo p = new PointInfo(); //X轴值 p.XValue = i; //Y轴值 p.YValue = r; curveGroupInfo.CurvePointListInfo.Add(p); } curveGroupInfo.RefreshGeometricFigure(); }; timer.Start(); } /// <summary> /// 首页数据初始化 /// </summary> internal static void InitalHomePageData(Canvas canvasCoordinates, Grid gridChartContainer) { //坐标系 CoordinatesInfoType _coordinates = new CoordinatesInfoType(); _coordinates.YMaxValue = 1.2;//CalculteSatus.corrCoeffVecAbs == null ? 1 : CalculteSatus.corrCoeffVecAbs.Max(); _coordinates.YMinValue = 0; _coordinates.YMarkCount = 10; _coordinates.XMaxValue = 1000; _coordinates.XMinValue = 0; _coordinates.XMarkCount = 20; _coordinates.XName = ""; _coordinates.DrawCoordinates(canvasCoordinates, true); //柱状组 ColumnGroupInfo columnGroupInfo = new ColumnGroupInfo(); //设置图标ID columnGroupInfo.ID = DataFactory.HomePageChartId; columnGroupInfo.DataControl = ControlType.ColumnChart; columnGroupInfo.Name = "TestData"; DataFactory.ChartBaseDictionary[columnGroupInfo.ID] = columnGroupInfo; //界面数据展示 //图表数据展示 BaseControl baseControl = new BaseControl(DataFactory.HomePageChartId, _coordinates); gridChartContainer.Children.Add(baseControl); //ColumnGroupInfo columnGroupInfo = DataFactory.GetShowData(DataFactory.HomePageChartId) as ColumnGroupInfo; if (columnGroupInfo == null) return; //启动一个定时器 DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(1); timer.Tick += delegate { //if (HomePageViewModel.Instance.StartState) { if (CalculteSatus.disVec == null) { return; } _coordinates.XMaxValue = CalculteSatus.disVec[CalculteSatus.disVec.Length - 1]; //_coordinates.YMaxValue = CalculteSatus.corrCoeffVecAbs == null ? 1 : CalculteSatus.corrCoeffVecAbs.Max(); double yMax = CalculteSatus.corrCoeffVecAbs.Max(); columnGroupInfo.ColumnListInfo = new List<ColumnInfo>(); for (int i = 0; i < CalculteSatus.disVec.Length; i++) { ColumnInfo columnInfo = new ColumnInfo(); columnInfo.Name = ""; //X轴的值 columnInfo.XValue = CalculteSatus.disVec[i]; //Y轴柱状的初始值,如没有,可设置为y周的原点值 columnInfo.StartValue = 0; //Y轴柱状的末值 columnInfo.EndValue = CalculteSatus.corrCoeffVecAbs[i] / yMax; //添加到柱状组里 columnGroupInfo.ColumnListInfo.Add(columnInfo); } columnGroupInfo.RefreshGeometricFigure(); double Max = 0.0; int pos = 0; for (int i = 0; i < CalculteSatus.corrCoeffVecAbs.Length; i++) { if (CalculteSatus.corrCoeffVecAbs[i] > Max) { Max = CalculteSatus.corrCoeffVecAbs[i]; pos = i; } } HomePageViewModel.Instance.SpeedValuePos = (int)(CalculteSatus.disVec[pos] * 950 / _coordinates.XMaxValue); //HomePageViewModel.Instance.SpeedValue = (CalculteSatus.timeDiff == 0 ? "0" : CalculteSatus.timeDiff.ToString("0.00")) + "ms"; } }; timer.Start(); ////过滤器数值展示 //HomePageViewModel.Instance.FilterValue = ""; ////信噪比数值展示 //HomePageViewModel.Instance.SNR = ""; ////管道数值展示 //HomePageViewModel.Instance.PipeLine = ""; ////声速数值展示 //HomePageViewModel.Instance.SoundSpeed = ""; ////经过了数值展示 //HomePageViewModel.Instance.Pass = ""; ////设置检测总距离 //HomePageViewModel.Instance.TotalDistance = 0; ////速度距离:橙色 //HomePageViewModel.Instance.SpeedDistance = 20; ////速度值:橙色 //HomePageViewModel.Instance.SpeedValue = "-8.4ms"; ////发射器A数值 //HomePageViewModel.Instance.TransmitterABattery = 0; //HomePageViewModel.Instance.TransmitterADistance = 0; //HomePageViewModel.Instance.TransmitterASignalIntensity = 0; //HomePageViewModel.Instance.TransmitterAFault = true; ////发射器B数值 //HomePageViewModel.Instance.TransmitterBBattery = 0; //HomePageViewModel.Instance.TransmitterBDistance = 0; //HomePageViewModel.Instance.TransmitterBSignalIntensity = 0; //HomePageViewModel.Instance.TransmitterBFault = true; } /// <summary> /// 初始化菜单 /// </summary> internal static void InitalMenuData() { MenuInfo m1 = new MenuInfo(); m1.Name = "音频"; MenuViewModel.Instance.MenuInfos.Add(m1); MenuInfo m2 = new MenuInfo(); m2.Name = "快照"; MenuViewModel.Instance.MenuInfos.Add(m2); } /// <summary> /// 初始化自定义声速列表 /// </summary> internal static void InitalSoundSpeedData(int id) { SoundSpeedEditViewModel.Instance.SoundSpeedInfos.Clear(); string josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); JObject jo = JObject.Parse(josnString); int i = 0; foreach(var v in jo["CustomMaterial"][id]["range"]) { string[] range = v.ToString().Split('-'); SoundSpeedInfo soundSpeedInfo = new SoundSpeedInfo(); soundSpeedInfo.ID = Guid.NewGuid().ToString(); soundSpeedInfo.Order = i + 1; soundSpeedInfo.MinRange = range[0]; soundSpeedInfo.MaxRange = range[1]; soundSpeedInfo.Speed = jo["CustomMaterial"][id]["speed"][i++].ToString(); //绑定一个菜单项 SoundSpeedEditViewModel.Instance.SoundSpeedInfos.Add(soundSpeedInfo); } } internal static void ResetHomePageData() { ColumnGroupInfo columnGroupInfo = DataFactory.GetShowData(DataFactory.HomePageChartId) as ColumnGroupInfo; if (columnGroupInfo == null) return; columnGroupInfo.ColumnListInfo = new List<ColumnInfo>(); ColumnInfo columnInfo = new ColumnInfo(); columnInfo.Name = ""; columnInfo.XValue = 0; columnInfo.StartValue = 0; columnInfo.EndValue = 0; columnGroupInfo.ColumnListInfo.Add(columnInfo); columnGroupInfo.RefreshGeometricFigure(); CorrelatorDataSaveThread.filterInfo.LowPass = 0; CorrelatorDataSaveThread.filterInfo.HighPass = 0; CorrelatorDataSaveThread.isNoFilter = true; HomePageViewModel.Instance.FilterValue = ""; HomePageViewModel.Instance.SNR = ""; HomePageViewModel.Instance.PipeLine = ""; HomePageViewModel.Instance.SoundSpeed = ""; HomePageViewModel.Instance.Pass = ""; HomePageViewModel.Instance.TotalDistance = 0; HomePageViewModel.Instance.SpeedDistance = 20; HomePageViewModel.Instance.SpeedValue = ""; HomePageViewModel.Instance.TransmitterADistance = 0; HomePageViewModel.Instance.TransmitterBDistance = 0; if (CalculteSatus.corrCoeffVecAbs != null && CalculteSatus.disVec != null) { Array.Clear(CalculteSatus.corrCoeffVecAbs, 0, CalculteSatus.corrCoeffVecAbs.Length); Array.Clear(CalculteSatus.disVec, 0, CalculteSatus.disVec.Length); } } #region 管径 private static readonly String[] qiutie = { "0-99", "100-199", "200-299", "300-399", "400-599", "600-799", "800-899", "1000+" }; private static readonly String[] zhutie = { "0-99", "100-199", "200-299", "300-399", "400-499", "500-699", "700+" }; private static readonly String[] gang = { "0-19", "20-99", "100-199", "200-299", "300-499", "500-699", "700-899", "900+" }; private static readonly String[] tong = { "0-14", "15-24", "25-59", "60+" }; private static readonly String[] qian = { "0-19", "20+" }; private static readonly String[] shuining = { "0-99", "100-199", "200-349", "350-499", "500-699", "700-899", "900+" }; private static readonly String[] PVC = { "0-17", "18-22", "23-27", "28-49", "50-74", "75-99", "100-199", "200+" }; private static readonly String[] HDPE = { "0-17", "18-22", "23-74", "75-199", "200+" }; private static readonly String[] MDPE = { "0-17", "18-22", "23-74", "75-199", "200+" }; private static readonly String[] boligang = { "0-49", "50-99", "100-199", "200-399", "400-799", "800-1199", "1200-1999", "2000+" }; private static readonly String[] hunningtu = { "0-499", "500-699", "700-899", "900-1199", "1200-1799", "1800+" }; private static readonly String[] niantu = { "0-99", "100-199", "200-349", "350-499", "500-699", "700-899", "900+" }; private static readonly String[] LDPE = { "0-17", "18-22", "23-74", "75+" }; #endregion internal static void InitalPipeRangeData(String pipeMaterialName) { SelectPipeRangeViewModel.Instance.PipeRangeInfos.Clear(); switch(pipeMaterialName) { case "球铁": foreach (string range in qiutie) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "铸铁": foreach (string range in zhutie) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "钢": foreach (string range in gang) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "铜": foreach (string range in tong) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "铅": foreach (string range in qian) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "水泥": foreach (string range in shuining) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "PVC": foreach (string range in PVC) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "HDPE": foreach (string range in HDPE) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "MDPE": foreach (string range in MDPE) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "玻璃钢": foreach (string range in boligang) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "混凝土": foreach (string range in hunningtu) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "粘土": foreach (string range in niantu) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; case "LDPE": foreach (string range in LDPE) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } break; default: string josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); JObject jo = JObject.Parse(josnString); foreach (var v in jo["CustomMaterial"]) { if (pipeMaterialName == v["name"].ToString()) { foreach (var range in v["range"]) { PipeRangeInfo pipeRange = new PipeRangeInfo(); pipeRange.Range = range.ToString() + "mm"; SelectPipeRangeViewModel.Instance.PipeRangeInfos.Add(pipeRange); } } } break; } } internal static void InitalPipeMaterialData() { for (int i = 0; i < 13; i++) { PipeMaterialInfo pipeMaterial = new PipeMaterialInfo(); string name = string.Empty; string name2 = "null"; switch (i) { case 0: name = "球铁"; break; case 1: name = "铸铁"; break; case 2: name = "钢"; break; case 3: name = "铜"; break; case 4: name = "铅"; break; case 5: name = "水泥"; break; case 6: name = "PVC"; name2 = "聚氯乙烯"; break; case 7: name = "HDPE"; name2 = "高密度聚乙烯"; break; case 8: name = "MDPE"; name2 = "中密度聚乙烯"; break; case 9: name = "玻璃钢"; break; case 10: name = "混凝土"; break; case 11: name = "粘土"; break; case 12: name = "LDPE"; name2 = "低密度聚乙烯"; break; } pipeMaterial.Name = name; pipeMaterial.Name2 = name2; SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.Add(pipeMaterial); } } /// <summary> /// 初始化自定义材质 /// </summary> internal static void InitalCustomizedPipeMaterialData() { StreamReader sr = new StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + "config.json"); JObject jo = (JObject)JsonConvert.DeserializeObject(sr.ReadToEnd()); sr.Close(); if (SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.Count == 16) { SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.RemoveAt(15); SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.RemoveAt(14); SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.RemoveAt(13); } for (int i = 0; i < 3; i++) { PipeMaterialInfo pipeMaterial = new PipeMaterialInfo(); pipeMaterial.Name = jo["CustomMaterial"][i]["name"].ToString(); pipeMaterial.Name2 = null; pipeMaterial.ID = i; pipeMaterial.IsEnabled = true; SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.Add(pipeMaterial); } } internal static void InitalAudioListData(string select) { AudioListViewModel.Instance.FileInfos.Clear(); var dir = Directory.GetCurrentDirectory() + "\\File\\" + select; int i = 1; foreach (var file in new DirectoryInfo(dir).GetFiles("*", SearchOption.AllDirectories)) { PipeGallery.Model.FileInfo fi = new PipeGallery.Model.FileInfo(); fi.Order = i++; fi.FileName = file.Name.Substring(0,file.Name.IndexOf(".")); fi.FullPath = dir + "\\" + file.Name; fi.FileSize = file.Length; fi.CreationTimeUtc = file.LastWriteTime; AudioListViewModel.Instance.FileInfos.Add(fi); } AudioListViewModel.Instance.RefreshShowFileInfos(); } /// <summary> /// 还原默认值、编辑名称按钮功能,更新材质 /// add by gwq /// </summary> internal static void UpdatePipeMaterialData() { SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.RemoveAt(13); SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.RemoveAt(13); SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.RemoveAt(13); StreamReader sr = new StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + "config.json"); JObject jo = (JObject)JsonConvert.DeserializeObject(sr.ReadToEnd()); sr.Close(); for (int i = 1; i < 4; i++) { jo["CustomMaterial"][i-1] = "自定义材质" + i; PipeMaterialInfo pipeMaterial = new PipeMaterialInfo(); pipeMaterial.Name = "自定义材质" + i; SelectPipeMaterialViewModel.Instance.PipeMaterialInfos.Add(pipeMaterial); System.IO.StreamWriter sw = new System.IO.StreamWriter(System.AppDomain.CurrentDomain.BaseDirectory + "config.json"); sw.Write(Newtonsoft.Json.JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); } } } }