Могу ли я десериализовать xml прямо в список

это может быть глупый вопрос, но, пожалуйста, потерпите меня =)

В своей программе я получаю кусок xml, похожий на этот:

<markers>
        <marker id="35" name="Test1" address="anyway123" type="event"/>
        <marker id="370" name="Test2" address="" type="event"/>
        <marker id="251" name="Test3" address="somewhere 1337" type="com"/>
</markers>

Что я хочу знать, есть ли способ создать класс, содержащий что-то вроде этого:

private int id;
private string name;
private string address;
private string type;

public int Id {
    get {
        return id;
    }
    set {
        id = value;
    }
}
public string Name {
    get {
        return name;
    }
    set {
        name = value;
    }
}
public string Address {
    get {
        return address;
    }
    set {
        address = value;
    }
}
public string Type {
    get {
        return type;
    }
    set {
        type = value;
    }
}

Назовем его «EventClass», а затем просто скажем так:

Могу я просто пойти примерно так: List eventList = "XMLStuff"

И если да, то что влечет за собой XML? xD

С уважением, -Логан =)


person Logan    schedule 06.02.2014    source источник
comment
Да, ты можешь. И вы знаете, как мир, который вы ищете, называется: десериализатор.   -  person MarcinJuraszek    schedule 06.02.2014
comment
О, я гуглил раньше (совсем немного), но не нашел, вы правы, это обман. Можно ли как-нибудь пометить это как таковое?   -  person Logan    schedule 06.02.2014


Ответы (1)


Вы можете использовать стандартный XmlSerializer, если хотите внести несколько изменений в свой класс:

  • XML чувствителен к регистру, поэтому вы должны использовать имена в нижнем регистре для своих свойств (id, name и т. Д.
  • создать содержащий класс с массивом вашего класса данных
  • Добавьте атрибут [XmlRoot("markers")] к содержащему классу
  • Добавьте атрибут [XmlElement("marker")] к свойству массива

Что-то вроде этого:

[XmlRoot("markers")]
public class EventList
{
    [XmlElement("marker")]
    public List<EventClass> EventClasses {get; set;}
}


public class EventClass
{
    public int id {get; set;}
    public string name {get; set;}
    public string address {get; set;}
    public string type {get; set;}
}
person D Stanley    schedule 06.02.2014