C# &引用&书信电报;serviceconfigxmlns=&x27'&燃气轮机;没有预期的错误

C# &引用&书信电报;serviceconfigxmlns=&x27'&燃气轮机;没有预期的错误,c#,xml,xml-deserialization,C#,Xml,Xml Deserialization,我有一个扩展基类的程序,如下所示: namespace ConsoleExample { [Serializable, XmlRoot("ServiceConfig")] public class ServiceConfig : BaseConfig<ServiceConfig> { } } <?xml version="1.0" encoding="utf-8"?> <ServiceConfig xmlns:xsi="http:

我有一个扩展基类的程序,如下所示:

namespace ConsoleExample
{
    [Serializable, XmlRoot("ServiceConfig")]
    public class ServiceConfig : BaseConfig<ServiceConfig>
    {
    }
}
<?xml version="1.0" encoding="utf-8"?>

<ServiceConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

  <WindowTitle>Utility</WindowTitle>
  <LicenseKey />
  <BaseUri />

  <!-- Database connection information -->
  <DatabaseInfo>
    <ServerName>ABC</ServerName>
    <DatabaseName>XYZ</DatabaseName>
...
名称空间控制台示例
{
[可序列化,XmlRoot(“ServiceConfig”)]
公共类ServiceConfig:BaseConfig
{
}
}
其中BaseConfig包括以下方法:

        public abstract class BaseConfig<T> where T : BaseConfig<T>
        {
    ... 
            public void LoadConfig()
            {
                // Load configuration file
                ConfigReader<BaseConfig<T>> _configReader = new ConfigReader<BaseConfig<T>>(configFileName);

                _configReader.Load();
...
公共抽象类BaseConfig,其中T:BaseConfig
{
... 
公共void LoadConfig()
{
//加载配置文件
ConfigReader _ConfigReader=新的ConfigReader(configFileName);
_configReader.Load();
...
而ConfigReader是:

    public class ConfigReader<T>
    {
...    
               public Boolean Load()
                {
                    try
                    {
                            reader = new XmlTextReader(new StreamReader(_actualPath));
                            XmlSerializer serializer = new XmlSerializer(typeof(T));
                            deserializedObject = (T)(serializer.Deserialize(reader));
                         }
                    }
        ...
公共类ConfigReader
{
...    
公共布尔加载()
{
尝试
{
reader=newxmltextreader(newstreamreader(_actualPath));
XmlSerializer serializer=新的XmlSerializer(typeof(T));
反序列化对象=(T)(序列化程序.反序列化(读取器));
}
}
...
我的XML是这样的:

namespace ConsoleExample
{
    [Serializable, XmlRoot("ServiceConfig")]
    public class ServiceConfig : BaseConfig<ServiceConfig>
    {
    }
}
<?xml version="1.0" encoding="utf-8"?>

<ServiceConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

  <WindowTitle>Utility</WindowTitle>
  <LicenseKey />
  <BaseUri />

  <!-- Database connection information -->
  <DatabaseInfo>
    <ServerName>ABC</ServerName>
    <DatabaseName>XYZ</DatabaseName>
...

公用事业
基础知识
XYZ
...
当我运行此程序时,我收到错误消息
“未预期错误

我发现这建议添加XMLRoot标记,但这没有帮助。我认为这可能是因为反序列化是在BaseConfig程序中编码的,无法正确解释XMLRoot,但不确定如何更正

编辑:

通过使用以下方法创建ConfigReader对象解决了此问题:

public void LoadConfig()
{
//加载配置文件
ConfigReader _ConfigReader=新的ConfigReader(configFileName);
...

你为什么要重新发明轮子?为什么不在app.config中添加一个自定义配置部分,让
ConfigurationManager
完成所有工作?@DStanley你能进一步解释一下吗?不知道我在重新发明什么。如果有人看到这篇文章,我就通过使用just(参见编辑)创建ConfigReader解决了这个问题。