public void PasteFromClipboard() { string json = GUIUtility.systemCopyBuffer; if (!string.IsNullOrEmpty(json)) { try { SerializationContainer container = JsonUtility.FromJson <SerializationContainer>(json); if (container != null) { List <Node> nodes = Graph.Deserialize(container.Nodes, container.Edges); if (nodes != null && nodes.Count > 0) { Vector2 pastePosition = ProjectToGDICanvas(new Vector2(Screen.width / 2f, Screen.height / 2f)); Vector2 pasteOffset = pastePosition - new Vector2(nodes[0].WindowRect.x, nodes[0].WindowRect.y); Graph.MoveNodes(nodes, pasteOffset); Graph.SetNewIds(nodes); bool wasTrigger = Graph.TriggerEvents; Graph.TriggerEvents = false; Graph.AddNodes(nodes); Graph.UpdateEdgeBounds(); Graph.TriggerEvents = wasTrigger; _selectedNodes.Clear(); _selectedNodes = nodes; ResetTextFieldFocus(); } } } catch (ArgumentException e) { Log.Info("Can not parse clipboard content. " + e.Message); } } }
public void TestSerializationHelperElementCanSerialize() { var toSerialize = new List <SimpleSerializeClass>() { SimpleSerializeClass.instance }; var serialized = SerializationHelper.Serialize <SimpleSerializeClass>(toSerialize); Assert.AreEqual(1, serialized.Count); var container = new SerializationContainer { serializedElements = serialized }; var serializedContainer = JsonUtility.ToJson(container, true); var deserializedContainer = JsonUtility.FromJson <SerializationContainer>(serializedContainer); var loaded = SerializationHelper.Deserialize <SimpleSerializeClass>(deserializedContainer.serializedElements, null); Assert.AreEqual(1, loaded.Count); Assert.IsInstanceOf <SimpleSerializeClass>(loaded[0]); loaded[0].AssertAsReference(); }
private void CopyNodes(List <Node> nodes) { if (nodes != null && nodes.Count > 0) { SerializationContainer container = Graph.Serialize(nodes); string json = JsonUtility.ToJson(container); GUIUtility.systemCopyBuffer = json; } }
public void Test1() { var container = new SerializationContainer(); var sr = container.Add(new JsonContractSerializer()); container.Start(); var test = new Blah { Message = "Hmm" }; var blob = container.PayloadSerialize(test); var resolve = container.PayloadDeserialize <Blah>(blob); Assert.AreEqual(test, resolve); }
public void OnBeforeSerialize() { var sc = new SerializationContainer() { methods = missingMethods.ToList(), fields = missingFields.ToList(), properties = missingProperties.ToList(), methodIndex = methodIndex, fieldIndex = fieldIndex, propertyIndex = propertyIndex }; using (var ms = new MemoryStream()) { var bf = new BinaryFormatter(); bf.Serialize(ms, sc); serializationBytes = ms.ToArray(); } }
public static void SerializeScene() { List <SerializedObject> serializedObjects = new List <SerializedObject>(); foreach (var platform in Object.FindObjectsOfType <SerializableObject>()) { serializedObjects.Add(new SerializedObject(platform.GetBlueprintIndex(), platform as IInteractable)); } var container = new SerializationContainer(serializedObjects); string json = JsonUtility.ToJson(container); var fileName = $"Level {DateTime.Now:yyyy-MM-dd_HH-mm-ss-fff}.json"; var fullPath = GetFullPath(fileName); var file = File.CreateText(fullPath); file.Write(json); file.Close(); Creator.Instance.SaveLevel(in fullPath); }
static void Main(string[] args) { var container = new SerializationContainer(); container.ResolveSerializationParser() .Execute(args); }
internal static SerializationContainer Serialize_Deserialize() { var Area = ExpectedValuesOfInitializationBLLTest.LoadTestdorfESTW(); var Estw = Area.ESTWs.Single(e => e.Id == "TTST"); Estw.Time = new LeibitTime(eDaysOfService.Thursday, 13, 40); Estw.LastUpdatedOn = DateTime.Now.AddSeconds(-10); var Train = Area.Trains[2007]; var LiveTrain = new TrainInformation(Train); LiveTrain.Block = Estw.Blocks["32G12"].First(); var ProbeSchedule = new LiveSchedule(LiveTrain, Train.Schedules.FirstOrDefault(s => s.Station.ShortSymbol == "TPRB")); ProbeSchedule.LiveArrival = new LeibitTime(eDaysOfService.Thursday, 13, 7); ProbeSchedule.LiveDeparture = new LeibitTime(eDaysOfService.Thursday, 13, 8); ProbeSchedule.LiveTrack = ProbeSchedule.Schedule.Track; LiveTrain.AddSchedule(ProbeSchedule); var TestdorfSchedule = new LiveSchedule(LiveTrain, Train.Schedules.FirstOrDefault(s => s.Station.ShortSymbol == "TTST")); TestdorfSchedule.LiveArrival = new LeibitTime(eDaysOfService.Thursday, 13, 12); TestdorfSchedule.LiveDeparture = new LeibitTime(eDaysOfService.Thursday, 13, 14); TestdorfSchedule.LiveTrack = TestdorfSchedule.Schedule.Track; LiveTrain.AddSchedule(TestdorfSchedule); Area.LiveTrains.TryAdd(Train.Number, LiveTrain); Train = Area.Trains[12345]; LiveTrain = new TrainInformation(Train); LiveTrain.Block = Estw.Blocks["31G3"].First(); ProbeSchedule = new LiveSchedule(LiveTrain, Train.Schedules.FirstOrDefault(s => s.Station.ShortSymbol == "TPRB")); ProbeSchedule.LiveArrival = new LeibitTime(eDaysOfService.Thursday, 13, 14); ProbeSchedule.LiveTrack = ProbeSchedule.Schedule.Track; LiveTrain.AddSchedule(ProbeSchedule); TestdorfSchedule = new LiveSchedule(LiveTrain, Train.Schedules.FirstOrDefault(s => s.Station.ShortSymbol == "TTST")); TestdorfSchedule.LiveArrival = new LeibitTime(eDaysOfService.Thursday, 13, 7); TestdorfSchedule.LiveDeparture = new LeibitTime(eDaysOfService.Thursday, 13, 10); TestdorfSchedule.LiveTrack = TestdorfSchedule.Schedule.Track; LiveTrain.AddSchedule(TestdorfSchedule); Area.LiveTrains.TryAdd(Train.Number, LiveTrain); Train = Area.Trains[12346]; LiveTrain = new TrainInformation(Train); LiveTrain.Block = Estw.Blocks["32G22"].First(); ProbeSchedule = new LiveSchedule(LiveTrain, Train.Schedules.FirstOrDefault(s => s.Station.ShortSymbol == "TPRB")); ProbeSchedule.LiveArrival = new LeibitTime(eDaysOfService.Thursday, 13, 15); ProbeSchedule.LiveDeparture = new LeibitTime(eDaysOfService.Thursday, 13, 25); ProbeSchedule.LiveTrack = ProbeSchedule.Schedule.Track; var ProbeDelay = ProbeSchedule.AddDelay(5, eDelayType.Departure); ProbeDelay.Reason = "Meep"; LiveTrain.AddSchedule(ProbeSchedule); TestdorfSchedule = new LiveSchedule(LiveTrain, Train.Schedules.FirstOrDefault(s => s.Station.ShortSymbol == "TTST")); TestdorfSchedule.LiveArrival = new LeibitTime(eDaysOfService.Thursday, 13, 29); TestdorfSchedule.LiveDeparture = new LeibitTime(eDaysOfService.Thursday, 13, 30); TestdorfSchedule.LiveTrack = TestdorfSchedule.Schedule.Station.Tracks.Single(t => t.Name == "2"); LiveTrain.AddSchedule(TestdorfSchedule); Area.LiveTrains.TryAdd(Train.Number, LiveTrain); var Result = new SerializationContainer(); Result.Area = Area; return(Result); }
private void __Save() { if (m_CurrentFilename.IsNullOrEmpty()) { __SaveAs(); return; } var Container = new SerializationContainer(); Container.Area = m_CurrentArea; Container.VisibleStations = Runtime.VisibleStations.Select(s => new SerializedStation { EstwId = s.ESTW.Id, ShortSymbol = s.ShortSymbol }).ToList(); foreach (var Window in ChildWindows) { var SerializedWindow = new SerializedWindowInformation(); if (Window is DelayJustificationView) { SerializedWindow.Type = eChildWindowType.DelayJustification; SerializedWindow.Tag = (Window.DataContext as DelayJustificationViewModel).CurrentTrain.Train.Number; } else if (Window is ESTWSelectionView) { SerializedWindow.Type = eChildWindowType.ESTWSelection; } else if (Window is SettingsView) { SerializedWindow.Type = eChildWindowType.Settings; } else if (Window is TimeTableView) { SerializedWindow.Type = eChildWindowType.TimeTable; SerializedWindow.Tag = (Window.DataContext as TimeTableViewModel).CurrentStation.ShortSymbol; } else if (Window is TrainProgressInformationView) { SerializedWindow.Type = eChildWindowType.TrainProgressInformation; } else if (Window is TrainScheduleView) { SerializedWindow.Type = eChildWindowType.TrainSchedule; SerializedWindow.Tag = (Window.DataContext as TrainScheduleViewModel).CurrentTrain.Number; } else if (Window is LocalOrdersView) { SerializedWindow.Type = eChildWindowType.LocalOrders; var VM = Window.DataContext as LocalOrdersViewModel; SerializedWindow.Tag = new KeyValuePair <int, string>(VM.CurrentSchedule.Train.Number, VM.CurrentSchedule.Station.ShortSymbol); } else if (Window is SystemStateView) { SerializedWindow.Type = eChildWindowType.SystemState; } else { continue; } SerializedWindow.Width = Window.Width; SerializedWindow.Height = Window.Height; SerializedWindow.PositionX = Window.PositionX; SerializedWindow.PositionY = Window.PositionY; Container.Windows.Add(SerializedWindow); } var SaveResult = m_SerializationBll.Save(m_CurrentFilename, Container); if (SaveResult.Succeeded) { StatusBarText = "Aktueller Zustand gespeichert"; } else { ShowMessage(SaveResult); } }
public OperationResult <SerializedRoot> Save(string Filename, SerializationContainer Request) { try { var SettingsResult = SettingsBll.GetSettings(); ValidateResult(SettingsResult); var Settings = SettingsResult.Result; var Result = new OperationResult <SerializedRoot>(); var Root = new SerializedRoot(); Root.AreaId = Request.Area.Id; Root.LoadedESTWs.AddRange(Request.Area.ESTWs.Where(e => e.IsLoaded).Select(e => new SerializedESTW { ESTWId = e.Id, Time = e.Time, StartTime = e.StartTime, IsActive = (DateTime.Now - e.LastUpdatedOn).TotalSeconds < Settings.EstwTimeout, })); Root.Version = Assembly.GetEntryAssembly().GetCustomAttribute <AssemblyInformationalVersionAttribute>()?.InformationalVersion; foreach (var Train in Request.Area.LiveTrains.Values) { var SerializedTrain = new SerializedTrain(); SerializedTrain.TrainNumber = Train.Train.Number; SerializedTrain.Delay = Train.Delay; SerializedTrain.LastModified = Train.LastModified; SerializedTrain.CreatedOn = Train.CreatedOn; SerializedTrain.TrainDirection = Train.Direction; SerializedTrain.IsDestinationStationCancelled = Train.IsDestinationStationCancelled; foreach (var block in Train.BlockHistory) { var serializedBlock = new SerializedBlock(); serializedBlock.EstwId = block.Track.Station.ESTW.Id; serializedBlock.Name = block.Name; serializedBlock.Direction = block.Direction; SerializedTrain.BlockHistory.Add(serializedBlock); } if (Train.Block != null) { SerializedTrain.CurrentEstwId = Train.Block.Track.Station.ESTW.Id; SerializedTrain.Block = Train.Block.Name; SerializedTrain.BlockDirection = Train.Block.Direction; } foreach (var Schedule in Train.Schedules) { var SerializedSchedule = new SerializedSchedule(); SerializedSchedule.EstwId = Schedule.Schedule.Station.ESTW.Id; SerializedSchedule.StationShortSymbol = Schedule.Schedule.Station.ShortSymbol; SerializedSchedule.StationTime = Schedule.Schedule.Time; SerializedSchedule.LiveArrival = Schedule.LiveArrival; SerializedSchedule.LiveDeparture = Schedule.LiveDeparture; SerializedSchedule.IsArrived = Schedule.IsArrived; SerializedSchedule.IsDeparted = Schedule.IsDeparted; SerializedSchedule.ExpectedArrival = Schedule.ExpectedArrival; SerializedSchedule.ExpectedDeparture = Schedule.ExpectedDeparture; SerializedSchedule.ExpectedDelayArrival = Schedule.ExpectedDelayArrival; SerializedSchedule.ExpectedDelayDeparture = Schedule.ExpectedDelayDeparture; SerializedSchedule.IsComposed = Schedule.IsComposed; SerializedSchedule.IsPrepared = Schedule.IsPrepared; SerializedSchedule.IsCancelled = Schedule.IsCancelled; SerializedSchedule.IsManuallyModified = Schedule.IsManuallyModified; if (Schedule.LiveTrack != null) { SerializedSchedule.LiveTrack = Schedule.LiveTrack.Name; } foreach (var Delay in Schedule.Delays) { var SerializedDelay = new SerializedDelay(); SerializedDelay.Type = Delay.Type; SerializedDelay.Minutes = Delay.Minutes; SerializedDelay.Reason = Delay.Reason; SerializedDelay.CausedBy = Delay.CausedBy; SerializedSchedule.Delays.Add(SerializedDelay); } SerializedTrain.Schedules.Add(SerializedSchedule); } Root.LiveTrains.Add(SerializedTrain); } Root.Windows = Request.Windows; Root.VisibleStations = Request.VisibleStations; Root.VisibleTrains = Request.VisibleTrains; Root.HiddenSchedules = Request.HiddenSchedules; using (var Stream = new FileStream(Filename, FileMode.Create, FileAccess.Write)) { m_Formatter.Serialize(Stream, Root); } Result.Result = Root; Result.Succeeded = true; return(Result); } catch (Exception ex) { return(new OperationResult <SerializedRoot> { Message = ex.Message }); } }
public OperationResult <SerializationContainer> Open(string Filename) { try { var SettingsResult = SettingsBll.GetSettings(); ValidateResult(SettingsResult); var Settings = SettingsResult.Result; var Container = new SerializationContainer(); var File = new FileInfo(Filename); if (!File.Exists) { throw new OperationFailedException(String.Format("File '{0}' does not exist.", Filename)); } SerializedRoot Root; using (var Stream = File.OpenRead()) { Root = m_Formatter.Deserialize(Stream) as SerializedRoot; } if (Root == null) { throw new OperationFailedException("Invalid file."); } var AreaResult = InitializationBll.GetAreaInformation(); ValidateResult(AreaResult); var Area = AreaResult.Result.FirstOrDefault(a => a.Id == Root.AreaId); if (Area == null) { throw new OperationFailedException("Invalid area."); } foreach (var SerializedEstw in Root.LoadedESTWs) { if (!Settings.LoadInactiveEstws && !SerializedEstw.IsActive) { continue; } var Estw = Area.ESTWs.FirstOrDefault(e => e.Id == SerializedEstw.ESTWId); if (Estw == null) { throw new OperationFailedException("Invalid ESTW."); } var LoadResult = InitializationBll.LoadESTW(Estw); ValidateResult(LoadResult); Estw.Time = SerializedEstw.Time; Estw.StartTime = SerializedEstw.StartTime; } foreach (var SerializedTrain in Root.LiveTrains) { var Estw = Area.ESTWs.SingleOrDefault(e => e.Id == SerializedTrain.CurrentEstwId); if (Estw?.IsLoaded == false || !Area.Trains.ContainsKey(SerializedTrain.TrainNumber)) { continue; } var Train = Area.Trains[SerializedTrain.TrainNumber]; var LiveTrain = new TrainInformation(Train); LiveTrain.Delay = SerializedTrain.Delay; LiveTrain.LastModified = SerializedTrain.LastModified; LiveTrain.CreatedOn = SerializedTrain.CreatedOn; LiveTrain.Direction = SerializedTrain.TrainDirection; LiveTrain.IsDestinationStationCancelled = SerializedTrain.IsDestinationStationCancelled; if (SerializedTrain.BlockHistory != null) { foreach (var block in SerializedTrain.BlockHistory) { var estw2 = Area.ESTWs.SingleOrDefault(e => e.Id == block.EstwId); if (estw2 == null || !estw2.Blocks.ContainsKey(block.Name)) { continue; } LiveTrain.BlockHistory.AddIfNotNull(estw2.Blocks[block.Name].FirstOrDefault(b => b.Direction == block.Direction)); } } if (SerializedTrain.Block != null && Estw.Blocks.ContainsKey(SerializedTrain.Block)) { LiveTrain.Block = Estw.Blocks[SerializedTrain.Block].FirstOrDefault(b => b.Direction == SerializedTrain.BlockDirection); } var SchedulesResult = CalculationBll.GetSchedulesByTime(Train.Schedules, Estw?.Time ?? SerializedTrain.LastModified); ValidateResult(SchedulesResult); foreach (var SerializedSchedule in SerializedTrain.Schedules) { var Schedule = SchedulesResult.Result.FirstOrDefault(s => s.Station.ShortSymbol == SerializedSchedule.StationShortSymbol && s.Time == SerializedSchedule.StationTime && (s.Station.ESTW.Id == SerializedSchedule.EstwId || SerializedSchedule.EstwId == null)); if (Schedule == null) { continue; } var LiveSchedule = new LiveSchedule(LiveTrain, Schedule); LiveSchedule.LiveArrival = SerializedSchedule.LiveArrival; LiveSchedule.LiveDeparture = SerializedSchedule.LiveDeparture; LiveSchedule.IsArrived = SerializedSchedule.IsArrived; LiveSchedule.IsDeparted = SerializedSchedule.IsDeparted; LiveSchedule.ExpectedArrival = SerializedSchedule.ExpectedArrival; LiveSchedule.ExpectedDeparture = SerializedSchedule.ExpectedDeparture; LiveSchedule.IsComposed = SerializedSchedule.IsComposed; LiveSchedule.IsPrepared = SerializedSchedule.IsPrepared; LiveSchedule.IsCancelled = SerializedSchedule.IsCancelled; LiveSchedule.IsManuallyModified = SerializedSchedule.IsManuallyModified; if (SerializedSchedule.ExpectedDelay.HasValue) { // Ensure compatibility LiveSchedule.ExpectedDelayDeparture = SerializedSchedule.ExpectedDelay; } else { LiveSchedule.ExpectedDelayArrival = SerializedSchedule.ExpectedDelayArrival; LiveSchedule.ExpectedDelayDeparture = SerializedSchedule.ExpectedDelayDeparture; } if (SerializedSchedule.LiveTrack.IsNotNullOrEmpty()) { LiveSchedule.LiveTrack = Schedule.Station.Tracks.SingleOrDefault(t => t.Name == SerializedSchedule.LiveTrack); } if (LiveSchedule.LiveArrival != null) { LiveSchedule.IsArrived = true; } if (LiveSchedule.LiveDeparture != null) { LiveSchedule.IsDeparted = true; } foreach (var SerializedDelay in SerializedSchedule.Delays) { var Delay = LiveSchedule.AddDelay(SerializedDelay.Minutes, SerializedDelay.Type); Delay.Reason = SerializedDelay.Reason; Delay.CausedBy = SerializedDelay.CausedBy; } LiveTrain.AddSchedule(LiveSchedule); } if (Estw != null) { // Don't validate result here. When this fails, it's not so dramatic... var prevResult = CalculationBll.GetPreviousService(Train, Estw); if (prevResult.Succeeded) { LiveTrain.PreviousService = prevResult.Result; } var followUpResult = CalculationBll.GetFollowUpService(Train, Estw); if (followUpResult.Succeeded) { LiveTrain.FollowUpService = followUpResult.Result; } } if (LiveTrain.Schedules.Any()) { Area.LiveTrains.TryAdd(Train.Number, LiveTrain); } } foreach (var Estw in Area.ESTWs) { if (Estw.StartTime == null) { var schedules = Area.LiveTrains.Values.SelectMany(t => t.Schedules).Where(s => s.Schedule.Station.ESTW == Estw); if (schedules.Any()) { Estw.StartTime = schedules.Min(s => s.LiveArrival); var minStartTime = Estw.Time.AddHours(-12); if (Estw.StartTime < minStartTime) { Estw.StartTime = minStartTime; } } else { Estw.StartTime = Estw.Time; } } } Container.Area = Area; Container.VisibleStations = Root.VisibleStations; Container.VisibleTrains = Root.VisibleTrains; Container.HiddenSchedules = Root.HiddenSchedules; Container.Windows = Root.Windows; Container.IsOldVersion = Root.Version != Assembly.GetEntryAssembly().GetCustomAttribute <AssemblyInformationalVersionAttribute>()?.InformationalVersion; var Result = new OperationResult <SerializationContainer>(); Result.Result = Container; Result.Succeeded = true; return(Result); } catch (Exception ex) { return(new OperationResult <SerializationContainer> { Message = ex.Message }); } }
/// <summary> /// THis method returns the default scheduler container. /// </summary> protected virtual SerializationContainer InitialiseSerializationContainer() { var container = new SerializationContainer(Policy.Serialization); return(container); }
public OperationResult <SerializationContainer> Open(string Filename) { try { var SettingsResult = SettingsBll.GetSettings(); ValidateResult(SettingsResult); var Settings = SettingsResult.Result; var Container = new SerializationContainer(); var File = new FileInfo(Filename); if (!File.Exists) { throw new OperationFailedException(String.Format("File '{0}' does not exist.", Filename)); } SerializedRoot Root; using (var Stream = File.OpenRead()) { Root = m_Formatter.Deserialize(Stream) as SerializedRoot; } if (Root == null) { throw new OperationFailedException("Invalid file."); } var AreaResult = InitializationBll.GetAreaInformation(); ValidateResult(AreaResult); var Area = AreaResult.Result.FirstOrDefault(a => a.Id == Root.AreaId); if (Area == null) { throw new OperationFailedException("Invalid area."); } foreach (var SerializedEstw in Root.LoadedESTWs) { if (!Settings.LoadInactiveEstws && !SerializedEstw.IsActive) { continue; } var Estw = Area.ESTWs.FirstOrDefault(e => e.Id == SerializedEstw.ESTWId); if (Estw == null) { throw new OperationFailedException("Invalid ESTW."); } var LoadResult = InitializationBll.LoadESTW(Estw); ValidateResult(LoadResult); Estw.Time = SerializedEstw.Time; } foreach (var SerializedTrain in Root.LiveTrains) { var Estw = Area.ESTWs.SingleOrDefault(e => e.Id == SerializedTrain.CurrentEstwId); if (Estw == null || !Estw.IsLoaded || !Area.Trains.ContainsKey(SerializedTrain.TrainNumber)) { continue; } var Train = Area.Trains[SerializedTrain.TrainNumber]; var LiveTrain = new TrainInformation(Train); LiveTrain.Delay = SerializedTrain.Delay; LiveTrain.LastModified = SerializedTrain.LastModified; LiveTrain.Direction = SerializedTrain.TrainDirection; if (Estw.Blocks.ContainsKey(SerializedTrain.Block)) { LiveTrain.Block = Estw.Blocks[SerializedTrain.Block].FirstOrDefault(b => b.Direction == SerializedTrain.BlockDirection); } var SchedulesResult = CalculationBll.GetSchedulesByTime(Train.Schedules, Estw.Time); ValidateResult(SchedulesResult); foreach (var SerializedSchedule in SerializedTrain.Schedules) { var Schedule = SchedulesResult.Result.FirstOrDefault(s => s.Station.ShortSymbol == SerializedSchedule.StationShortSymbol && s.Time == SerializedSchedule.StationTime && (s.Station.ESTW.Id == SerializedSchedule.EstwId || SerializedSchedule.EstwId == null)); if (Schedule == null) { continue; } var LiveSchedule = new LiveSchedule(LiveTrain, Schedule); LiveSchedule.LiveArrival = SerializedSchedule.LiveArrival; LiveSchedule.LiveDeparture = SerializedSchedule.LiveDeparture; LiveSchedule.IsArrived = SerializedSchedule.IsArrived; LiveSchedule.IsDeparted = SerializedSchedule.IsDeparted; LiveSchedule.ExpectedArrival = SerializedSchedule.ExpectedArrival; LiveSchedule.ExpectedDeparture = SerializedSchedule.ExpectedDeparture; LiveSchedule.ExpectedDelay = SerializedSchedule.ExpectedDelay; if (SerializedSchedule.LiveTrack.IsNotNullOrEmpty()) { LiveSchedule.LiveTrack = Schedule.Station.Tracks.SingleOrDefault(t => t.Name == SerializedSchedule.LiveTrack); } foreach (var SerializedDelay in SerializedSchedule.Delays) { var Delay = LiveSchedule.AddDelay(SerializedDelay.Minutes, SerializedDelay.Type); Delay.Reason = SerializedDelay.Reason; Delay.CausedBy = SerializedDelay.CausedBy; } LiveTrain.AddSchedule(LiveSchedule); } if (LiveTrain.Schedules.Any()) { Area.LiveTrains.TryAdd(Train.Number, LiveTrain); } } Container.Area = Area; Container.VisibleStations = Root.VisibleStations; Container.Windows = Root.Windows; var Result = new OperationResult <SerializationContainer>(); Result.Result = Container; Result.Succeeded = true; return(Result); } catch (Exception ex) { return(new OperationResult <SerializationContainer> { Message = ex.Message }); } }