使用Linq,如何解析Xml到只接受构造函数中的参数的C#对象?

Vis*_*nan 3 c# xml linq

假设我有一些XML像这样:

<User>
    <Name>X</Name>
    <Gender>Y</Gender>
    <ImageUrl>Z</ImageUrl>
</User>
Run Code Online (Sandbox Code Playgroud)

我有一个名为User的类.

public class User
{
    public User(string name, string gender, string imageUrl) 
    {
        Name = name;
        Gender = gender;
        ImageUrl = imageUrl;
    }
    public string Name { get; }
    public string Gender { get; }
    public string ImageUrl { get; }
}
Run Code Online (Sandbox Code Playgroud)

public User(string name, string gender, string ImageUrl)它只接受构造函数并且不允许为属性设置,使用linq和c#将这个xml解析为这些对象的最佳方法是什么?

以粗略的方式,可以创建匿名对象,然后迭代它们以创建所需的对象.有没有更有效的方法来做到这一点?

k.m*_*k.m 5

您根本不需要任何匿名对象.使用LINQ to XML,您只需从XML中选择用户节点,并User通过使用从XML节点中选择的值调用构造函数来创建实际的类实例:

// xml contains XML string, like in your sample
var document = XDocument.Parse(xml);
var users = document.Descendants("User")
   .Select(u => new User(
       u.Element("Name").Value,
       u.Element("Gender").Value, 
       u.Element("ImageUrl").Value
   ));
Run Code Online (Sandbox Code Playgroud)