public IDictionary <string, object> AsDict() { var logURLs = new Dictionary <string, string> (); if (LogURL != null) { string defaultURL; logURLs.TryGetValue("*", out defaultURL); if (defaultURL == null) { logURLs ["*"] = LogURL; } else if (defaultURL != LogURL) { foreach (var run in Runs) { logURLs [run.Benchmark.Name] = LogURL; } } } var dict = new Dictionary <string, object> (); dict ["MainProduct"] = Commit.AsDict(); dict ["SecondaryProducts"] = SecondaryCommits.Select(c => c.AsDict()).ToList(); dict ["Machine"] = Machine.AsDict(); dict ["Config"] = Config.AsDict(); dict ["TimedOutBenchmarks"] = new List <string> (TimedOutBenchmarks); dict ["CrashedBenchmarks"] = new List <string> (CrashedBenchmarks); dict ["StartedAt"] = StartDateTime.ToString(DATETIME_FORMAT); dict ["FinishedAt"] = FinishDateTime.ToString(DATETIME_FORMAT); dict ["BuildURL"] = BuildURL; dict ["LogURLs"] = logURLs; dict ["Runs"] = Runs.Select(r => r.AsDict()).ToList(); if (PullRequestBaselineRunSetId != null) { var prDict = new Dictionary <string, object> (); prDict ["BaselineRunSetID"] = PullRequestBaselineRunSetId.Value; prDict ["URL"] = PullRequestURL; dict ["PullRequest"] = prDict; } return(dict); }