2011-01-29 19 views
8

Jeszcze jedno pytanie o serializację XML z .Net.Deserializowanie tablicy XML w katalogu głównym dokumentu

Otrzymuję ciąg znaków XML od strony trzeciej i chcę przetworzyć go w klasie .Net przy minimalnym zamieszaniu. Nie chcę używać xsd, ponieważ mój XML jest dość prosty i nie podoba mi się to, że wypluwa pełne klasy. Mam podstawy operacji deserialization, ale mam problemy z tablicą poziomu root.

Problem XML jest jak poniżej:

<people> 
    <person> 
    <id>1234</id> 
    </person> 
    <person> 
    <id>4567</id> 
    </person> 
</people> 

Jak mogę mapować atrybuty na moim C# osoby klasy, aby go deserialise?

To jest to, co chciałbym pracować, ale tak nie jest.

[Serializable()] 
[XmlRootAttribute("people", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 

Gdybym magiel XML do:

<result> 
    <people> 
    <person> 
     <id>1234</id> 
    </person> 
    <person> 
     <id>4567</id> 
    </person> 
    </people> 
</result> 

Następnie współpracuje z definicji klasy poniżej, ale czuje się bardzo źle.

[Serializable()] 
[XmlRootAttribute("result", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArray(ElementName = "people")] 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 
+0

Nie potrzebujesz '[Serializable]', btw - nie jest używane przez 'XmlSerializer' –

Odpowiedz

9
[XmlElement("person")] 
public List<Person> Persons; 

chociaż faktycznie wolę:

private List<Person> persons; 
[XmlElement("person")] 
public List<Person> Persons {get{return persons??(persons=new List<Person>());}} 

jak to ma:

  • odroczony tworzenie listy, bo kiedy nie trzeba żadnych ludzi
  • Nie " ustaw "na właściwości listy (nie jest to konieczne)
Powiązane problemy