Ruskin
Ruskin

Reputation: 1504

appsettings.json in .netCore console application

I have an appsettings.json file with the following values

{ 
  "MailOptions": 
  { 
    "Username": "ruskin", 
    "Password": "password" 
  } 
}

When I read it via the ConfigurationBuilder I can only access the values via configuration["MailSettings:Username"]. I want to grab the entire MailOptions string, is there anyway to do that? I don't want to use Json to parse the file etc...I want to stick to configuration builder.

I would expect configuration.GetSection("MailOptions") to work? It simply returns null.

What I have tried

SomeSection aSection = new SomeSection();
ServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.Configure<SomeSection>(options => configuration.GetSection("SomeSection").Bind(aSection));
var someSection = serviceCollection.BuildServiceProvider().GetService<IOptions<SomeSection>>();

// aSection is instantiated but no values in it
// someSection is null

My appsettings.json

{
  "SomeSection": {
    "UserName": "ruskin",
    "Password": "dantra" 
  }
}

And my POCO class

public class SomeSection
{
    public string UserName { get; set; }
    public string Password { get; set; }
}

Upvotes: 2

Views: 4159

Answers (1)

Martin Ullrich
Martin Ullrich

Reputation: 100543

The configuration framework is an abstraction over the underlying source types. So MailOptions:Username could come from JSON, an environment variables or even INI files - and the configuration system can even be configured with multiple sources. If need a JSON string to configure your mail library and want to use the configuration abstraction, I suggest creating a class to hold the settings and serialize it to a JSON string again.

EDIT:

Using configuration.GetSection("SomeSection").Get<SomeSection>() I can successfully get the POCO from the app. see sample application.

Upvotes: 3

Related Questions