XML к IEnumerable <T>

Вы смотрели на это? http://developer.yahoo.com/yui/history/

6
задан Andrew Hare 22 September 2009 в 14:59
поделиться

3 ответа

Для следующих типов:

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; }
}

Я думаю, что вы могли бы сделать что-то вроде этого:

    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)
            });
    }

Что бы вы назвали так:

IEnumerable<Fruit> fruit = GetSomeFruit<Fruit>(yourXml);
9
ответ дан 9 December 2019 в 20:46
поделиться

Вот способ сделать это с помощью сериализации, если вам это нравится:

using System;
using System.IO;
using System.Xml.Serialization;

public static class Test
{
    public static void Main(string[] args)
    {
        var fs = new FileStream("fruits.xml", FileMode.Open);
        var x = new XmlSerializer(typeof(Fruits));
        var fruits = (Fruits) x.Deserialize(fs);
        Console.WriteLine("{0} count: {1}", fruits.GetType().Name, fruits.fruits.Length);
        foreach(var fruit in fruits.fruits)
            Console.WriteLine("id: {0}, name: {1}", fruit.id, fruit.name);
    }
}

[XmlRoot("fruits")]
public class Fruits
{
    [XmlElement(ElementName="fruit")]
    public Fruit[] fruits;
}

public class Fruit
{
    public string name;
    public int id;
}
3
ответ дан 9 December 2019 в 20:46
поделиться

Я не уверен, что полностью понимаю ваши обстоятельства, но один из подходов - определить класс передачи данных и сделать его сериализуемым в XML. Затем вы можете десериализовать XML в массив объектов.

edit

Я не собираюсь удалять это, но я думаю, что то, что опубликовал Эндрю Хэйр, ближе к тому, что вы хотите, и я проголосовал за его в поддержку.

0
ответ дан 9 December 2019 в 20:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: