IConfigurationRoot.GetRequiredSection() - section not found in xml

112 Views Asked by At

Here is the problem. I have a .config file in xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <section name="serial1">
        <key name="PortName">value COM1</key>
        <key name="Parity">value Odd</key>
        <key name="DataBits">value 8</key>
        <key name="StopBits">value One</key>
        <key name="BaudRate">value 9600</key>
    </section>
    <section name="serial2">
        <key name="PortName">value COM2</key>
        <key name="BaudRate">value 4800</key>
        <key name="DataBits">value 8</key>
        <key name="Parity">value Odd</key>
        <key name="StopBits">value One</key>
    </section>
</configuration>

I use the following code to access it:

using Microsoft.Extensions.Configuration;
using System.IO.Ports;

IConfigurationRoot configRoot = new ConfigurationBuilder()
    .AddXmlFile("App.config", optional: false, reloadOnChange: false)
    .Build()
    ;
Console.WriteLine($"{configRoot.GetDebugView()}");

SerialPortSettings? portSettings = configRoot.GetRequiredSection("serial1").Get<SerialPortSettings>();

public sealed class SerialPortSettings
{
    public string? PortName { get; set; }
    public Parity Parity { get; set; }
    public uint BaudRate { get; set; }
    public uint DataBits { get; set; }
    public StopBits StopBits { get; set; }
}

GetDebugView() returns a reasonable output:


section:
  serial1:
    key:
      BaudRate=value 9600 (XmlConfigurationProvider for 'App.config' (Required))
        name=BaudRate (XmlConfigurationProvider for 'App.config' (Required))
      DataBits=value 8 (XmlConfigurationProvider for 'App.config' (Required))
        name=DataBits (XmlConfigurationProvider for 'App.config' (Required))
      Parity==value Odd (XmlConfigurationProvider for 'App.config' (Required))
        name=Parity (XmlConfigurationProvider for 'App.config' (Required))
      PortName=value COM1 (XmlConfigurationProvider for 'App.config' (Required))
        name=PortName (XmlConfigurationProvider for 'App.config' (Required))
      StopBits=value One (XmlConfigurationProvider for 'App.config' (Required))
        name=StopBits (XmlConfigurationProvider for 'App.config' (Required))
    name=serial1 (XmlConfigurationProvider for 'App.config' (Required))
  serial2:
    key:
      BaudRate=value 4800 (XmlConfigurationProvider for 'App.config' (Required))
        name=BaudRate (XmlConfigurationProvider for 'App.config' (Required))
      DataBits=value 8 (XmlConfigurationProvider for 'App.config' (Required))
        name=DataBits (XmlConfigurationProvider for 'App.config' (Required))
      Parity==value Odd (XmlConfigurationProvider for 'App.config' (Required))
        name=Parity (XmlConfigurationProvider for 'App.config' (Required))
      PortName=value COM2 (XmlConfigurationProvider for 'App.config' (Required))
        name=PortName (XmlConfigurationProvider for 'App.config' (Required))
      StopBits=value One (XmlConfigurationProvider for 'App.config' (Required))
        name=StopBits (XmlConfigurationProvider for 'App.config' (Required))
    name=serial2 (XmlConfigurationProvider for 'App.config' (Required))

But GetRequiredSection() throws an exception:

System.InvalidOperationException: 'Section 'serial1' not found in configuration.'

What am I doing wrong? Are there any special considerations on section names?

Tried everything I could think of...

0

There are 0 best solutions below