public TinaValidator(ValidateLogic logic = null) { Logic = logic; }
public void Load(string filePath) { string jsonString; using (FileStream fs = new FileStream(filePath, FileMode.Open)) { using (StreamReader sr = new StreamReader(fs)) { jsonString = sr.ReadToEnd(); } } JsonSerializerOptions jso = new JsonSerializerOptions { WriteIndented = true }; jso.Converters.Add(new TNodeJsonConverter()); jso.Converters.Add(new AreaJsonConverter()); jso.Converters.Add(new ChoiceJsonConverter()); jso.Converters.Add(new StatementJsonConverter()); jso.Converters.Add(new UnitConverter()); jso.Converters.Add(new OtherJsonConverter()); ValidateLogic vl = JsonSerializer.Deserialize <ValidateLogic>(jsonString, jso); TNodes = vl.TNodes; Areas = vl.Areas; Name = vl.Name; StartNode = TNodes[vl.StartNode.ID]; for (int i = 0; i < Areas.Count; i++) { if (Areas[i].StartNode != null) { Areas[i].StartNode = TNodes[(Areas[i].StartNode as IDNode).ID]; } if (Areas[i].Parent != null) { if (Name == (Areas[i].Parent as IDArea).Name) { Areas[i].Parent = this; } else { Areas[i].Parent = Areas.Find(m => m.Name == (Areas[i].Parent as IDArea).Name); } } } foreach (KeyValuePair <string, TNode> kv in TNodes) { if (kv.Value.NextNode != null) { kv.Value.NextNode = TNodes[(kv.Value.NextNode as IDNode).ID]; } if (kv.Value.Parent != null) { if (Name == (kv.Value.Parent as IDArea).Name) { kv.Value.Parent = this; } else { kv.Value.Parent = Areas.Find(m => m.Name == (kv.Value.Parent as IDArea).Name); } } if (kv.Value is Status st) { for (int i = 0; i < st.Choices.Count; i++) { st.Choices[i].Node = st.Choices[i].Node != null ? TNodes[(st.Choices[i].Node as IDNode).ID] : null; } } } }