public void GenerateSolution(SolutionSerializationMode serializationMode = SolutionSerializationMode.Bare) { if (DataSource == null) { DataSource = new StreamReader(SourcePath); } InstanceLoader.Reader = DataSource; Instance instance = InstanceLoader.LoadInstanceFile(); InstanceConverter.Instance = instance; InstanceConverter.ConvertToProblem(); Solution solution = new Solution() { Instance = instance, }; solution.GenerateSolutionFromRealData(); InstanceJsonSerializer serializer = new InstanceJsonSerializer(); if (OutputFilename == null) { OutputFilename = Path.GetFileNameWithoutExtension(SourcePath) + ".json"; } serializer.Path = OutputFilename; FileInfo file = new FileInfo(OutputFilename); file.Directory.Create(); serializer.SerializeSolution(solution, serializationMode); }
public void SerializeSolution(Solution solution, SolutionSerializationMode solutionSerializationMode = SolutionSerializationMode.Basic) { solution.PrepareForSerialization(); if (Writer == null) { FileInfo file = new FileInfo(Path); if (!file.Directory.Exists) { file.Directory.Create(); } Writer = new StreamWriter(Path); } JsonSerializerSettings settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.None, Formatting = (int)solutionSerializationMode > 2 ? Formatting.Indented : Formatting.None, }; var jsonResolver = new PropertyRenameAndIgnoreSerializerContractResolver(); if (solutionSerializationMode == SolutionSerializationMode.DebugTaskData) { jsonResolver.IgnoreProperty(typeof(TaskScore), nameof(TaskScore.BreaksPositions)); } if (solutionSerializationMode == SolutionSerializationMode.Basic) { jsonResolver.IgnoreProperty(typeof(Solution), nameof(Solution.AdOrdersScores)); } if (solutionSerializationMode == SolutionSerializationMode.Bare) { jsonResolver.IgnoreProperty(typeof(Solution), nameof(Solution.AdOrdersScores), nameof(Solution.Completion), nameof(Solution.CompletionScore), nameof(Solution.MaxCompletion), nameof(Solution.MildIncompatibilityLoss), nameof(Solution.OverdueAdsLoss), nameof(Solution.ExtendedBreakLoss), nameof(Solution.WeightedLoss), nameof(Solution.IntegrityLossScore), nameof(Solution.TotalStats), nameof(Solution.GradingFunctionDescription)); } JsonSerializer ser = JsonSerializer.Create(settings); ser.ContractResolver = jsonResolver; ser.Serialize(Writer, solution); Writer.Flush(); Writer.Close(); Writer = null; }