123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SAGA.Models.Graphs
- {
- /// <summary>
- /// 图存储类
- /// </summary>
- public class GraphDB
- {
- public GraphDB()
- {
- Elements = new List<GElement>();
- RefJObjects = new List<JObject>();
- }
- private JsonSerializerSettings CreateJsonSetting()
- {
- JsonSerializerSettings jsetting = new JsonSerializerSettings();
- jsetting.Converters.Add(new Point3DConverter());
- // jsetting.Converters.Add(new GElementConverter());
- return jsetting;
- }
- public List<GElement> Elements { get;private set; }
- /// <summary>
- /// 创造json字符串
- /// </summary>
- /// <returns></returns>
- public string CreateJsonStr()
- {
- string result = string.Empty;
- #region 构建序列化器
- JsonSerializerSettings jsetting = CreateJsonSetting();
- var serializer = JsonSerializer.Create(jsetting);
- #endregion
- JArray jobject = JArray.FromObject(this.Elements, serializer);
- result = jobject.ToString();
- return result;
- }
- #region 分组导出信息
- /// <summary>
- /// 创造json字符串
- /// </summary>
- /// <returns></returns>
- public string CreateJsonStrGroup()
- {
- string result = string.Empty;
- var jobject = CreateJObjectGroup();
- result = jobject.ToString();
- return result;
- }
- public JObject CreateJObjectGroup()
- {
- #region 构建序列化器
- JsonSerializerSettings jsetting = CreateJsonSetting();
- var serializer = JsonSerializer.Create(jsetting);
- var groups = this.Elements.GroupBy(e => e.ElementType).ToList();
- Dictionary<string, List<GElement>> tempSource = new Dictionary<string, List<GElement>>();
- foreach (var group in groups)
- {
- tempSource[group.Key + "List"] = group.ToList();
- }
- #endregion
- var jobject = JObject.FromObject(tempSource, serializer);
- foreach (var jo in RefJObjects)
- {
- try
- {
- jobject.Merge(jo);
- }
- catch (Exception ex)
- {
- }
- }
- return jobject;
- }
- public List<JObject> RefJObjects { get; private set; }
- #endregion
- /// <summary>
- /// 加载json字符串
- /// </summary>
- /// <param name="jsonStr"></param>
- public void LoadJsonStr(string jsonStr)
- {
- this.Elements.Clear();
- JsonSerializerSettings jsetting = CreateJsonSetting();
- var elements=JsonConvert.DeserializeObject<List<GElement>>(jsonStr, jsetting);
- this.Elements.AddRange(elements);
- }
- /// <summary>
- /// 创建图数据
- /// </summary>
- /// <param name="jsonStr"></param>
- /// <returns></returns>
- public static GraphDB CreasteDB(string jsonStr)
- {
- GraphDB dg = new GraphDB();
- dg.LoadJsonStr(jsonStr);
- return dg;
- }
- /// <summary>
- /// 保存到指定路径
- /// </summary>
- /// <param name="path"></param>
- /// <returns></returns>
- public bool SaveToFile(string path)
- {
- try
- {
- var strJson = CreateJsonStrGroup();// CreateJsonStr();
- File.WriteAllText(path, strJson);
- return true;
- }
- catch (Exception)
- {
- return false;
- }
- }
- }
- }
|