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...