C# Can';不读取xml节点

C# Can';不读取xml节点,c#,xml,C#,Xml,我已将以下XML保存到settings.config: <?xml version="1.0" encoding="utf-8" standalone="yes"?> <Settings> <Type>15</Type> <Module>True</Module> <Capacity>10</Capacity> </Settings> 这是我反序列化XML的代码: XDocu

我已将以下
XML
保存到
settings.config

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Settings>
  <Type>15</Type>
  <Module>True</Module>
  <Capacity>10</Capacity>
</Settings>
这是我反序列化
XML
的代码:

XDocument doc = XDocument.Load("settings.config");
        var settings = doc.Root
                          .Elements("Settings")
                          .Select(x => new Settings
                          {
                              Type = (int)x.Attribute("Type"),
                              Module = (bool)x.Attribute("Module"),
                              Capacity = (int)x.Attribute("Capacity"),
                          })
                          .ToList();

问题在于
设置
变量返回
计数=0
。我做错了什么

XML的几个问题

  • 是您的根,而不是根的元素。如果希望有多个
    ,则创建一个新的根元素,并将
    标记放在其中
  • 类型
    模块
    容量
    是元素,而不是属性

  • 如果只有1个设置注释,则可以执行以下操作:

    var settignsNode = doc.Element("Settings");
    
    var settings = new Settings()
    {
        Type = (int)settignsNode.Element("Type"),
        // ...
    };
    

    XML的几个问题

  • 是您的根,而不是根的元素。如果希望有多个
    ,则创建一个新的根元素,并将
    标记放在其中
  • 类型
    模块
    容量
    是元素,而不是属性

  • 如果只有1个设置注释,则可以执行以下操作:

    var settignsNode = doc.Element("Settings");
    
    var settings = new Settings()
    {
        Type = (int)settignsNode.Element("Type"),
        // ...
    };
    

    工作示例,但上面的答案是真正解释这里发生了什么

    XDocument doc = XDocument.Parse("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Settings><Type>15</Type><Module>True</Module><Capacity>10</Capacity></Settings>");
    var settings = doc
                              .Elements("Settings")
                              .Select(x => new Settings
                              {
                                  Type = (int.Parse(x.Elements("Type").First().Value)),
                                  Module = bool.Parse(x.Elements("Module").First().Value),
                                  Capacity = (int.Parse(x.Elements("Capacity").First().Value)),
                              })
                              .ToList();
    
    XDocument doc=XDocument.Parse(“15True10”);
    var设置=doc
    .要素(“设置”)
    .选择(x=>新设置
    {
    Type=(int.Parse(x.Elements(“Type”).First().Value)),
    Module=bool.Parse(x.Elements(“Module”).First().Value),
    容量=(int.Parse(x.Elements(“容量”).First().Value)),
    })
    .ToList();
    
    工作示例,但上面的答案是真正解释这里发生了什么

    XDocument doc = XDocument.Parse("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Settings><Type>15</Type><Module>True</Module><Capacity>10</Capacity></Settings>");
    var settings = doc
                              .Elements("Settings")
                              .Select(x => new Settings
                              {
                                  Type = (int.Parse(x.Elements("Type").First().Value)),
                                  Module = bool.Parse(x.Elements("Module").First().Value),
                                  Capacity = (int.Parse(x.Elements("Capacity").First().Value)),
                              })
                              .ToList();
    
    XDocument doc=XDocument.Parse(“15True10”);
    var设置=doc
    .要素(“设置”)
    .选择(x=>新设置
    {
    Type=(int.Parse(x.Elements(“Type”).First().Value)),
    Module=bool.Parse(x.Elements(“Module”).First().Value),
    容量=(int.Parse(x.Elements(“容量”).First().Value)),
    })
    .ToList();
    
    工作代码

    XDocument doc = XDocument.Parse("<Settings><Type>15</Type><Module>True</Module><Capacity>10</Capacity></Settings>");
    var settings = doc
                   .Elements("Settings")
                   .Select(x => new Settings
                   {
                       Type = (int)x.Element("Type"),
                       Module = (bool)x.Element("Module"),
                       Capacity = (int)x.Element("Capacity"),
                    })
                    .ToList();
    
    XDocument doc=XDocument.Parse(“15True10”);
    var设置=doc
    .要素(“设置”)
    .选择(x=>新设置
    {
    Type=(int)x.Element(“Type”),
    Module=(bool)x.Element(“Module”),
    容量=(int)x.Element(“容量”),
    })
    .ToList();
    
    工作代码

    XDocument doc = XDocument.Parse("<Settings><Type>15</Type><Module>True</Module><Capacity>10</Capacity></Settings>");
    var settings = doc
                   .Elements("Settings")
                   .Select(x => new Settings
                   {
                       Type = (int)x.Element("Type"),
                       Module = (bool)x.Element("Module"),
                       Capacity = (int)x.Element("Capacity"),
                    })
                    .ToList();
    
    XDocument doc=XDocument.Parse(“15True10”);
    var设置=doc
    .要素(“设置”)
    .选择(x=>新设置
    {
    Type=(int)x.Element(“Type”),
    Module=(bool)x.Element(“Module”),
    容量=(int)x.Element(“容量”),
    })
    .ToList();
    
    只需删除
    根目录
    ;设置是您的根目录。使用此选项:
    var settings=doc.Elements(“settings”)…
    @Quantic如果我删除
    根目录
    I get
    ,则该值不能为空。值名称:属性
    。但是我在xml中没有任何属性。只需删除
    Root
    ;设置是您的根目录。使用此选项:
    var settings=doc.Elements(“settings”)…
    @Quantic如果我删除
    根目录
    I get
    ,则该值不能为空。值名称:属性
    。但是我在xml.Uhm中没有属性,所以我需要创建一个根节点?是的,因为bool是一个打字错误,修正了@你想在你的文件中有多个设置节点吗?好的,知道了,谢谢你的帮助。我真的很感激:)嗯,那么我需要创建一个根节点?是的,因为bool是一个打字错误,修正了@你想在你的文件中有多个设置节点吗?好的,知道了,谢谢你的帮助。我真的很感激:)
    doc.Elements(“设置”)
    returnnull.that'XDocument doc=XDocument.Load(“Settings.config”);'没有正确加载文件你确定吗?测试代码在我的回答中,它工作得很好。但是我使用XDocument.Parse来代替Load
    doc.Elements(“设置”)
    returnnull.thay'XDocument doc=XDocument.Load(“Settings.config”);'没有正确加载文件你确定吗?测试代码在我的回答中,它工作得很好。但我使用XDocument.Parse代替Load