protected internal virtual object GetRuntimeObject()
{
if (SectionHandler != null)
{
ConfigurationSection parentSection = sectionInformation != null?sectionInformation.GetParentSection() : null;
object parent = parentSection != null?parentSection.GetRuntimeObject() : null;
if (RawXml == null)
{
return(parent);
}
try
{
// This code requires some re-thinking...
XmlReader reader = new ConfigXmlTextReader(
new StringReader(RawXml),
Configuration.FilePath);
DoDeserializeSection(reader);
if (!String.IsNullOrEmpty(SectionInformation.ConfigSource))
{
string fileDir = SectionInformation.ConfigFilePath;
if (!String.IsNullOrEmpty(fileDir))
{
fileDir = Path.GetDirectoryName(fileDir);
}
else
{
fileDir = String.Empty;
}
string path = Path.Combine(fileDir, SectionInformation.ConfigSource);
if (File.Exists(path))
{
RawXml = File.ReadAllText(path);
SectionInformation.SetRawXml(RawXml);
}
}
}
catch
{
// ignore, it can fail - we deserialize only in order to get
// the configSource attribute
}
XmlDocument doc = new ConfigurationXmlDocument();
doc.LoadXml(RawXml);
return(SectionHandler.Create(parent, ConfigContext, doc.DocumentElement));
}
return(this);
}