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

308 Views Asked by At

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.

1

There are 1 best solutions below

0
On BEST ANSWER

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