Joh*_*ing 2 c# xml linq xelement
我有以下场景,并希望获得有关该主题的一些帮助指导:
我有一个XML文件由一个简单的聊天应用程序组成的用户凭据(不用于商业用途,因此安全性在这种情况下没有任何意义).如果用户订阅了该服务,则其凭据应与XML文件中记录的凭据匹配.
XML文件的代码片段:
<Users>
<User>
<Username>Johan</Username>
<Password>Johan123</Password>
</User>
<User>
<Username>Carel</Username>
<Password>Carel123</Password>
</User>
...
...
</Users>
Run Code Online (Sandbox Code Playgroud)
然后我有以下课程:
public class Credentials
{
public string Username { get; set; }
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Credentials类仅用于检索XML文件中记录的用户列表,以及检索特定用户.
我有以下代码可以从XML文件中检索元素:
public List<Credentials> RetrieveUsers()
{
Root = XElement.Load(path + "Users.xml");
List<Credentials> credentials = new List<Credentials>();
var xmlResults = from element in Root.Elements().Elements()
select new
{
Username = element.Element("Username").Value,
Password = element.Element("Password").Value
};
foreach(var xmlResult in xmlResults)
{
Credentials temp = new Credentials();
temp.Username = xmlResult.Username;
temp.Password = xmlResult.Password;
credentials.Add(temp);
}
return credentials;
}
Run Code Online (Sandbox Code Playgroud)
然而,这感觉多余.我希望在以下行中实现某些功能(这不起作用):
public List<Credentials> RetrieveUsers()
{
Root = XElement.Load(path + "Users.xml");
List<Credentials> credentials = new List<Credentials>();
List<Credentials> xmlResults = from element in Root.Elements().Elements()
select new
{
Username = element.Element("Username").Value,
Password = element.Element("Password").Value
};
return xmlResults;
}
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误:
"无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.List'.存在显式转换(您是否错过了转换?)"
这很有道理,因为我想它使用IEnumerable来枚举select LINQ语句所产生的集合.
任何有关此事的帮助将不胜感激,请告诉我,如果我从错误的角度看这个,如果我可以使用另一种方法.提前致谢
您只需要调用ToList扩展方法来创建列表.此外,您需要创建Credentials对象而不是匿名类型的实例.例如:
var xmlResults = from element in Root.Elements().Elements()
select new Credentials
{
Username = element.Element("Username").Value,
Password = element.Element("Password").Value
};
return xmlResults.ToList();
Run Code Online (Sandbox Code Playgroud)
就个人而言,我不倾向于使用查询表达式来进行简单的/ select查询 - 我写过:
return Root.Elements().Elements() // TODO: Consider specifying the element name
.Select(element => new Credentials
{
Username = element.Element("Username").Value,
Password = element.Element("Password").Value
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
使用"点符号"这样的优点是调用ToList不会在括号中留下查询表达式,这看起来总是有点难看.
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |