Search code examples
c#appsettingsmailaddress

Read e-mail addresses from appsettings.json and write in a List<MailAddress>


Unfortunately, I can't manage to load the email addresses in the appsettings.json to the list . What am I doing wrong?

IConfiguration config = new ConfigurationBuilder()
                    .AddJsonFile("appsettings.json", false, true)
                    .Build();

Setting settings = config.GetRequiredSection("Settings").Get<Setting>();

Config Class:

public class Setting
{
   public List<MailAddress> MailAddresses { get; set; }
}

Shortened appsettings.json:

{
  "Settings": {
    "Mailadresses": [
      [ "[email protected]", "DisplayName 1" ],
      [ "[email protected], DisplayName 2" ],
      [ "[email protected], DisplayName 3" ]
    ]
  }
}

Thanks in advance for your help.


Solution

  • Here is a complete example which creates appsettings.json followed by reading the data. Written in .NET Core 7.

    using Microsoft.Extensions.Configuration;
    using System.Text.Json;
    
    namespace StackDemo;
    
    internal partial class Program
    {
        static void Main(string[] args)
        {
    
            CreateAppSettings();
    
            IConfigurationRoot config = InitMainConfiguration();
            List<Mailaddress> addresses = 
                config.GetSection($"{nameof(Settings)}:{nameof(Mailaddress)}")
                    .Get<Mailaddress[]>().ToList();
    
            foreach (var address in addresses)
            {
                Console.WriteLine($"{address.Display,-20}{address.Address}");
            }
    
            Console.ReadLine();
    
        }
    
        private static void CreateAppSettings()
        {
            List<Mailaddress> addresses = new List<Mailaddress>()
            {
                new () { Address = "[email protected]", Display = "First" },
                new () { Address = "[email protected]", Display = "Second" },
                new () { Address = "[email protected]", Display = "Third" }
            };
    
            Root setting = new Root() 
            { 
                Settings = new Settings()
                {
                    MailAddress = addresses.ToArray()
                }
            };
    
            string jsonString = JsonSerializer.Serialize(setting, 
                new JsonSerializerOptions { WriteIndented = true });
            File.WriteAllText("appsettings.json", jsonString);
        }
    
        private static IConfigurationRoot InitMainConfiguration()
        {
    
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json");
    
            return builder.Build();
    
        }
    }
    
    #region Place each class in their own file
    public class Root
    {
        public Settings Settings { get; set; }
    }
    
    public class Settings
    {
        public Mailaddress[] MailAddress { get; set; }
    }
    
    public class Mailaddress
    {
        public string Address { get; set; }
        public string Display { get; set; }
    } 
    #endregion