GraphDB.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace SAGA.Models.Graphs
  10. {
  11. /// <summary>
  12. /// 图存储类
  13. /// </summary>
  14. public class GraphDB
  15. {
  16. public GraphDB()
  17. {
  18. Elements = new List<GElement>();
  19. RefJObjects = new List<JObject>();
  20. }
  21. private JsonSerializerSettings CreateJsonSetting()
  22. {
  23. JsonSerializerSettings jsetting = new JsonSerializerSettings();
  24. jsetting.Converters.Add(new Point3DConverter());
  25. // jsetting.Converters.Add(new GElementConverter());
  26. return jsetting;
  27. }
  28. public List<GElement> Elements { get;private set; }
  29. /// <summary>
  30. /// 创造json字符串
  31. /// </summary>
  32. /// <returns></returns>
  33. public string CreateJsonStr()
  34. {
  35. string result = string.Empty;
  36. #region 构建序列化器
  37. JsonSerializerSettings jsetting = CreateJsonSetting();
  38. var serializer = JsonSerializer.Create(jsetting);
  39. #endregion
  40. JArray jobject = JArray.FromObject(this.Elements, serializer);
  41. result = jobject.ToString();
  42. return result;
  43. }
  44. #region 分组导出信息
  45. /// <summary>
  46. /// 创造json字符串
  47. /// </summary>
  48. /// <returns></returns>
  49. public string CreateJsonStrGroup()
  50. {
  51. string result = string.Empty;
  52. var jobject = CreateJObjectGroup();
  53. result = jobject.ToString();
  54. return result;
  55. }
  56. public JObject CreateJObjectGroup()
  57. {
  58. #region 构建序列化器
  59. JsonSerializerSettings jsetting = CreateJsonSetting();
  60. var serializer = JsonSerializer.Create(jsetting);
  61. var groups = this.Elements.GroupBy(e => e.ElementType).ToList();
  62. Dictionary<string, List<GElement>> tempSource = new Dictionary<string, List<GElement>>();
  63. foreach (var group in groups)
  64. {
  65. tempSource[group.Key + "List"] = group.ToList();
  66. }
  67. #endregion
  68. var jobject = JObject.FromObject(tempSource, serializer);
  69. foreach (var jo in RefJObjects)
  70. {
  71. try
  72. {
  73. jobject.Merge(jo);
  74. }
  75. catch (Exception ex)
  76. {
  77. }
  78. }
  79. return jobject;
  80. }
  81. public List<JObject> RefJObjects { get; private set; }
  82. #endregion
  83. /// <summary>
  84. /// 加载json字符串
  85. /// </summary>
  86. /// <param name="jsonStr"></param>
  87. public void LoadJsonStr(string jsonStr)
  88. {
  89. this.Elements.Clear();
  90. JsonSerializerSettings jsetting = CreateJsonSetting();
  91. var elements=JsonConvert.DeserializeObject<List<GElement>>(jsonStr, jsetting);
  92. this.Elements.AddRange(elements);
  93. }
  94. /// <summary>
  95. /// 创建图数据
  96. /// </summary>
  97. /// <param name="jsonStr"></param>
  98. /// <returns></returns>
  99. public static GraphDB CreasteDB(string jsonStr)
  100. {
  101. GraphDB dg = new GraphDB();
  102. dg.LoadJsonStr(jsonStr);
  103. return dg;
  104. }
  105. /// <summary>
  106. /// 保存到指定路径
  107. /// </summary>
  108. /// <param name="path"></param>
  109. /// <returns></returns>
  110. public bool SaveToFile(string path)
  111. {
  112. try
  113. {
  114. var strJson = CreateJsonStrGroup();// CreateJsonStr();
  115. File.WriteAllText(path, strJson);
  116. return true;
  117. }
  118. catch (Exception)
  119. {
  120. return false;
  121. }
  122. }
  123. }
  124. }