/// <summary> /// Преобразовать объект задачи в объект, который будет сериализоваться. /// </summary> /// <param name="problem">Объект задачи.</param> /// <returns>Объект сериализуемой задачи.</returns> public JSONProblem ToJsonProblem(Problem problem) { try { // Сериализуемый объект хранит только значения var result = new JSONProblem { Name = problem.Name, Consumers = problem.Consumers.Select(q => q.Demand).ToArray(), Suppliers = problem.Suppliers.Select(q => q.Capacity).ToArray(), Costs = new int[problem.Suppliers.Length, problem.Consumers.Length] }; // Преобразуем стоимости из массива в матрицу var height = problem.Suppliers.Length; var width = problem.Consumers.Length; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { result.Costs[i, j] = problem.Routes[i * width + j].Cost; } } return(result); } catch (Exception ex) { Console.WriteLine(ex.Message); } return(null); }
/// <summary> /// Преобразовать объект задачи из сериализуемого объекта задачи. /// </summary> /// <param name="problem">Объект сериализуемой задачи.</param> /// <returns>Объект задачи.</returns> public Problem FromJsonProblem(JSONProblem problem) { try { var result = new Problem { Name = problem.Name, Consumers = problem.Consumers.Select(q => new Consumer { Name = "B", Demand = q }).ToArray(), Suppliers = problem.Suppliers.Select(q => new Supplier { Name = "A", Capacity = q }).ToArray(), }; var height = problem.Suppliers.Length; var width = problem.Consumers.Length; var routes = new Route[height * width]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { routes[i * width + j] = new Route { Supplier = result.Suppliers[i], Consumer = result.Consumers[j], Cost = problem.Costs[i, j] }; } } result.Routes = routes; return(result); } catch (Exception ex) { Console.WriteLine(ex.Message); } return(null); }