public static void Main(string[] args) { var configureForPostalRegistry = JsonSerializerSettingsProvider.CreateSerializerSettings().ConfigureForPostalRegistry(); JsonConvert.DefaultSettings = () => configureForPostalRegistry; _configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false) .AddJsonFile($"appsettings.{Environment.MachineName.ToLowerInvariant()}.json", optional: true, reloadOnChange: false) .Build(); _importPath = string.IsNullOrEmpty(_configuration[ImportedPathConfigKey]) ? AppDomain.CurrentDomain.BaseDirectory + "\\imported" : _configuration[ImportedPathConfigKey]; Directory.CreateDirectory(_importPath); var importInstant = Instant.FromDateTimeOffset(DateTimeOffset.Now); var timestamp = new BPostTimestamp(importInstant); var dataToImport = DownloadPostalCodes(); var previouslyImportedData = GetPreviouslyImportedData(); var commandFactory = new CommandFactory(GetPostalNamesWithLanguage()); var oldByPostalCode = previouslyImportedData.GroupBy(x => x.PostalCode).ToDictionary(x => x.Key, x => x.ToList()); var newByPostalCode = dataToImport.GroupBy(x => x.PostalCode).ToDictionary(x => x.Key, x => x.ToList()); ImportCommands(GenerateCommands(newByPostalCode, oldByPostalCode, commandFactory, timestamp)); Console.WriteLine("Saving imported html to csv"); CsvWriterHelper.Export($"{_importPath}\\{importInstant.InUtc().ToString(FileDateFormat, CultureInfo.InvariantCulture)}.csv", dataToImport); Console.WriteLine("Finished"); Console.ReadKey(); }
/// <summary> /// Sets up and adds additional converters for PostalRegister to the JsonSerializerSettings /// </summary> /// <param name="source"></param> /// <returns>the updated JsonSerializerSettings</returns> public static JsonSerializerSettings ConfigureForPostalRegistry(this JsonSerializerSettings source) { var jsonSerializerSettings = JsonSerializerSettingsProvider.CreateSerializerSettings(); source.ContractResolver = jsonSerializerSettings.ContractResolver; if (source.ContractResolver is DefaultContractResolver resolver) { resolver.NamingStrategy.ProcessDictionaryKeys = true; } source.DateFormatHandling = DateFormatHandling.IsoDateFormat; source.Converters.Add(new StringEnumConverter { CamelCaseText = true }); //source.DateFormatString = "yyyy-MM-dd"; //source.Converters.Add(new TrimStringConverter()); //source.Converters.Add(new GuidConverter()); return(source .ConfigureForNodaTime(DateTimeZoneProviders.Tzdb) .WithIsoIntervalConverter()); }