XML到IEnumerable <T>

har*_*ter 6 c# xml linq asp.net

有没有办法获取给定的XML文件并转换(最好使用C#Generics)它到T的具体可枚举列表中,其中T是我的具体类

例如,我可能有一个类似的XML文件

<fruits>
    <fruit>
        <id>1</id>
        <name>apple</name>
    </fruit>
    <fruit>
        <id>2</id>
        <name>orange</name>
    </fruit>
</fruits>
Run Code Online (Sandbox Code Playgroud)

我想看一个水果对象列表

它有类似的属性

public class Fruit : IFruit
{
    public string name;
    public int id;
}
Run Code Online (Sandbox Code Playgroud)

我假设我需要某种映射,如果我要使用泛型,因为我希望这适用于理想的IFruit接口(不确定是否可能)

提前致谢

And*_*are 9

给出以下类型:

public interface IFruit
{
    String name { get; set; }
    Int32 id { get; set; }
}

public class Fruit : IFruit
{
    public String name { get; set; }
    public Int32 id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想你可以这样做:

    static IEnumerable<T> GetSomeFruit<T>(String xml)
        where T : IFruit, new()
    {
        return XElement.Parse(xml)
            .Elements("fruit")
            .Select(f => new T {
                name = f.Element("name").Value,
                id = Int32.Parse(f.Element("id").Value)
            });
    }
Run Code Online (Sandbox Code Playgroud)

您可以这样称呼:

IEnumerable<Fruit> fruit = GetSomeFruit<Fruit>(yourXml);
Run Code Online (Sandbox Code Playgroud)